学习java的重点之一:InputStream  字节输入流的使用

(1)FileInputstream: 子类,读取数据的通道

  使用步骤:

    1.获取目标文件:new File()

    2.建立通道:new FileInputString()

    3.读取数据:read()

    4.释放资源:close()

  1. //一些默认要导入的包
  2.  
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.IOException;
  1. public static void main(String[] args) throws IOException {
  2. // TODO Auto-generated method stub
  3.  
  4. //分别调用方法查看效果
  5. test1();
  6. System.out.println("-------------------------------------------");
  7. test2();
  8. System.out.println("-------------------------------------------");
  9. test3();
  10. System.out.println("-------------------------------------------");
  11. test4();
  12. }

  (2)读取数据的三种方式

    1.直接读取 (一次只能一个字节)

      int date = fileInputStream.read();

      char date3 = (char)fileInputStream.read();

  1. //方式一 直接打印
  2. public static void test1() throws IOException{
  3.  
  4. //(1)获取目标文件路径
  5. File file = new File("C:\\Users\\bg\\Desktop\\Demo1.java");
  6.  
  7. //(2)根据目标文件路径 建立通道: new FileInputStream(file)
  8. FileInputStream fileInputStream = new FileInputStream(file);
  9.  
  10. //(3)读取数据 :read();
  11. int date = fileInputStream.read();//这里是int类型
  12. int date2 = fileInputStream.read();//
  13. char date3 = (char)fileInputStream.read(); //以char类型显示
  14. System.out.println(date+"\\"+date2+"\\"+date3);
  15.  
  16. //(4)释放资源
  17. fileInputStream.close();
  18. }

    2.单独使用for循环(效率低)

      for(int i = 0; i < file.length();i++){

        System.out.print((char)fileInputStream.read());

      }

  1. //方式二 循环遍历
  2. public static void test2() throws IOException{
  3.  
  4. //通过时间测试效率
  5. long startTime = System.currentTimeMillis();
  6.  
  7. File file = new File("C:\\Users\\bg\\Desktop\\Demo1.java");
  8. FileInputStream fileInputStream = new FileInputStream(file);
  9.  
  10. //for循环
  11. for(int i = 0; i < file.length();i++){
  12. System.out.print((char)fileInputStream.read());
  13. }
  14.  
  15. fileInputStream.close();
  16.  
  17. long endTime = System.currentTimeMillis();
  18. System.out.println("读取文件所花时间:"+(endTime-startTime));
  19. }

    3.Byte[ ] 缓冲区(只能读取指定的字节数不能读取一个完整的文件)

      byte[] bt = new byte[1024];

      int count = fileInputStream.read(bt);

      System.out.println(new String (bt,0,count));

  1. //方式三 创建缓冲区(只能读取制定的大小,不能读取一个完整的文件)
  2. public static void test3() throws IOException{
  3.  
  4. File file = new File("C:\\Users\\bg\\Desktop\\Demo1.java");
  5.  
  6. FileInputStream fileInputStream = new FileInputStream(file);
  7.  
  8. //创建缓冲区,加快读取数据,确定要读取的字节大小
  9. byte[] bt = new byte[1024];
  10.  
  11. //read() 读取字节
  12. int count = fileInputStream.read(bt);
  13. System.out.println(count); //显示读取到的字节数
  14. System.out.println(new String (bt,0,count));//将字节转为字符串显示
  15.  
  16. fileInputStream.close();
  17. }

    4.缓冲区和循环结合。缓冲区一般设置为1024的倍数。理论上设置的缓冲区越大,读取效率越高

      byte[] bt = new byte[1024];

      int count = 0;

      while((count = fileInputStream.read(bt)) != -1){

        System.out.println(new String (bt,0,count));

      }

  1. //方式四 循环与缓冲区结合(效率高)
  2. public static void test4() throws IOException{
  3.  
  4. //通过时间测试效率
  5. long startTime = System.currentTimeMillis();
  6.  
  7. File file = new File("C:\\Users\\bg\\Desktop\\Demo1.java");
  8.  
  9. FileInputStream fileInputStream = new FileInputStream(file);
  10.  
  11. //缓冲区一般设置为1024的倍数。理论上设置的缓冲区越大,读取效率越高
  12. byte[] bt = new byte[1024];
  13.  
  14. int count = 0;
  15. //read返回 -1 时,证明已经遍历完
  16. while((count = fileInputStream.read(bt)) != -1){
  17. //字符串型显示(从bt中的第0个字节开始遍历count个长度)
  18. System.out.println(new String (bt,0,count));
  19. }
  20.  
  21. fileInputStream.close();
  22.  
  23. long endTime = System.currentTimeMillis();
  24. System.out.println("读取文件所花时间:"+(endTime-startTime));
  25. }

陌陌说:

  在以上,对比第二个和第四个方法,会发现方法四的效率是比较高的,所以推荐使用的四个方法

  在这里我们是直接抛出异常,除了抛出之外我们还可以使用

    try{  }cater{  }finally{  }

  的方式来处理异常

java IO流 之 字节输入流 InputString()的更多相关文章

  1. 【java】io流之字节输入流:java.io.InputStream类及子类java.io.FileInputStream

    package 文件操作; import java.io.File; import java.io.FileInputStream; import java.io.IOException; impor ...

  2. java IO流 之 字节输出流 OutputString()

    Java学习重点之一:OutputStream 字节输出流的使用 FileOutPutStream:子类,写出数据的通道 步骤: 1.获取目标文件 2.创建通道(如果原来没有目标文件,则会自动创建一个 ...

  3. java IO流 总结

    [-] 1什么是IO 2数据流的基本概念 1 数据流 2 输入流Input  Stream 3 输出流 数据流分类 3 标准IO 命令行参数 标准输入输出数据流 4javaIO层次体系结构 5 非流式 ...

  4. 学习笔记-java IO流总结 转载

    1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读 ...

  5. Java:IO流与文件基础

    Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...

  6. java IO流详解

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  7. Java IO流学习总结

    Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  8. Java IO流题库

    一.    填空题 Java IO流可以分为   节点流   和处理流两大类,其中前者处于IO操作的第一线,所有操作必须通过他们进行. 输入流的唯一目的是提供通往数据的通道,程序可以通过这个通道读取数 ...

  9. Java IO流总结

    Java IO流分类以及主要使用方式如下: IO流 |--字节流 |--字节输入流 InputStream: int read();//一次读取一个字节 int read(byte[] bys);// ...

随机推荐

  1. Codeforces 629D Babaei and Birthday Cake(树状数组优化dp)

    题意: 线段树做法 分析: 因为每次都是在当前位置的前缀区间查询最大值,所以可以直接用树状数组优化.比线段树快了12ms~ 代码: #include<cstdio> #include< ...

  2. Maximum Product Subarray(最大连续乘积子序列)

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  3. HTML学习之Flex 布局

    一.Flex 布局是什么? Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为 Flex 布局. .box ...

  4. hibernate_Criteria_分页_去重

    触发原因:实体类间存在一对多关系,并且在一这方加载多的时候用的加载模式是eager. 解决方法:1.非分页:criteria.setResultTransformer(Criteria.DISTINC ...

  5. eclipse bug之No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK

    解决办法: 1.eclipse菜单 - Window - Preferences- Java - Installed JREs 将配置的JRE定位到JDK,例如JRE home:D:\Program ...

  6. 网易互娱2017实习生招聘游戏研发工程师在线笔试第二场 C

    偶尔碰到这题,简单数位DP题,然而我已生疏了…… 这次算是重新想到的,看来对DP的理解有增进了…… dp[i][j][k],表示前i为,mod为j,是否出现2.3.5的剩下的数位可组成的数字.答案就是 ...

  7. 微信小程序 wafer2框架摘要

    微信小程序 wafer2框架摘要 帮助文档:https://github.com/tencentyun/wafer2-startup/wiki 使用了knex.js进行数据库交互,使用了koa.js进 ...

  8. 003 rip

    r0#config t Enter configuration commands, one per line.  End with CNTL/Z. r0(config)#router rip r0(c ...

  9. ios之UILabel实现文本自适应方法

    UILabel实现文本自适应方法(ios7) - (void)initUserInterface { UILabel *label = [[UILabel alloc]init]; label.num ...

  10. java poi excel导入模板设置下拉框

    import org.apache.poi.hssf.usermodel.DVConstraint; import org.apache.poi.hssf.usermodel.HSSFCell; im ...