zoukankan      html  css  js  c++  java
  • 关于Java IO InputStream 的一点整理!

    程序的开发其中一直在用文件的读写。可是对于java其中输入流以及输出流仅仅是会用不理解。一直以来想搞清楚其。可是一直没有运行(悲剧),今天早上抽出半个小时通过JDK API1.6.0中文版帮助逐步的了解下字节输入流读取字节的方法;
    以下就说说InputStream其中read()read(byte[]  b)read(byte[] bint off int len)的使用以及差别

    一、read()方法:
    public static void inputStreamRead1() {
          try{
                //构造一个输入流对象(读数据)test.txt文本的内容为:我爱你中国
                InputStream is = new FileInputStream(“E:\test.txt”);
                //构造一个输出流对象(写数据)
                OutputStream os = new FileOutputStream(“E:\ctest.txt”);
                int len;//表示读入的数据(十进制的形式表示)
                //FileInputStream能够使用read()方法一次读取一个字节,读入的数据以int类型返回,所以,你要是使用System.out.println()将数据显示出来的时候是以10进制的方式显示
                while((len = is.read())!=-1){
                     System.out.println(“len=”+len);
                     os.write(len);
               }
               os.close();
               is.close();
         }catch(Exception e){
                e.printStackTrace();
         }
    }
    执行以上程序,则控制台的输出为:
    如图
    图片1.png
    说明:我爱你中国为5个汉字。5个汉字则为10个字节。而read()方法为一个字节一个字节的读,所以读取10次,而后len的值则为汉字的10进制表示
    2、read(byte[] b)方法:
    public static void inputStreamRead2(){
         try{
               //构造输入流对象(读数据)test.txt文本的内容为多个我爱你中国
               InputStream is = new FileInputStream(“E:\test.txt”);
               //构造输出流对象(写数据)
               OutputStream os = new FileOutputStream(“E:\ctest.txt”);
               //创建一个长度为1024byte数组
               byte[] b = new byte[1024];
               //int len;表示成功读取的字节数的个数
               //FileInputStream能够使用read(byte[] b )每次读取多个(b.length)字节数据(每次最多读取多少个)到byte数组其中
               while((len = is.read(b))!=-1){
                   System.out.println(“len=”+len);
                   os.write(b);
               }
               os.close();
               is.close();
          }catch(Exception e){
               e.printStackTrace();
          }
    }
    执行上面的程序则控制台的输出为:
    如图
    图片2.png
    说明:每次最多读取1024个字节,非常明显使用这样的方式的效率要高于read()读取的效率,开发的过程其中也见识使用此方式进行读取;
    3、read(byte[] b,int off,intlen):
    1public static void inputStreamRead3(){
              try{
                    //构建输入流对象(读文件)
                    InputStream is = new FileInputStream(“E:\test.txt”);
                    //构建输出流对象(写文件)
                    OutputStream os = new FileOutputStream(“E:\ctest.txt”);
                   //声明一个大小为输入流大小的数组
                    byte[] b = new byte[is.available()];
                    int len = 0;//表示成功读取的字节数的个数
                    while(len<is.available()){
                         //read(byte[] b,int off, int len)表示从输入流其中最多将len个字节的数据读取到一个byte数组其中
                         len+=is.read(b, len, is.available() - len);
                         os.write(b);
                    }
                    os.close();
                    is.close();
               }catch{
                       e.printStackTrace();
               }
    }
    执行上面的程序控制台的输出为:
    如图
    图片3.png
    说明:则一次性读取完毕
    2public static void inputStreamRead3(){
              try{
                    //构建输入流对象(读文件)
                    InputStream is = new FileInputStream(“E:\test.txt”);
                   //构建输出流对象(写文件)
                    OutputStream os = new FileOutputStream(“E:\ctest.txt”);
                   //声明一个大小为输入流大小的数组
                    byte[] b = new byte[1024];
                    int len = 0;//表示成功读取的字节数的个数
                    while((len=is.read(b,len,1024))!=-1){
                          System.out.println(“len=”+len);
                          os.write(b);
                    }
                    os.close();
                    is.close();
               }catch{
                   e.printStackTrace();
               }
    }
    说明:执行上面的程序控制台的输出为:
    如图
    图片4.png
    则一次最多读取1024个字节


  • 相关阅读:
    Kafka 生产者 自定义分区策略
    同步互斥
    poj 1562 Oil Deposits(dfs)
    poj 2386 Lake Counting(dfs)
    poj 1915 KnightMoves(bfs)
    poj 1664 放苹果(dfs)
    poj 1543 Perfect Cubes (暴搜)
    poj 1166 The Clocks (暴搜)
    poj 3126 Prime Path(bfs)
    处理机调度
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/7065577.html
Copyright © 2011-2022 走看看