InputStream中read的使用理解

Java IO流之读取方法详解
本文详细介绍了Java中InputStream类的三种基本读取方法:单字节读取、字节数组读取以及带有偏移量和长度限制的字节数组读取方法。通过具体的代码示例,展示了不同读取方式的应用场景及其优缺点。


   我们从输入流中读取数据最常用的方法基本上就是如下 3 个 read() 方法了:

          1 、  read () 方法,这个方法 从输入流中读取数据的下一个字节。返回 0  到 255  范

围内的 int  字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1 。

public static void inputStreamRead1() {

      try{
            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();

     }

}

 

          2 、 read (byte[] b,int off,int len) 方法, 将输入流中最多 len  个数据字节读入

byte  数组。尝试读取 len  个字节,但读取的字节也可能小于该值。以整数形式返回实际读取的字

节数。 b - 读入数据的缓冲区。 off - 在其处写入数据的数组 b 的初始偏移量。 len - 要读取的

最大字节数。

public static void inputStreamRead2(){

     try{
           InputStream is = new FileInputStream(“E:\\test.txt”);

           //构造输出流对象(写数据)

           OutputStream os = new FileOutputStream(“E:\\ctest.txt”);

           //创建一个长度为1024的byte数组

           byte[] b = new byte[1024]; 

           //int len;表示成功读取的字节数的个数

           //FileInputStream可以使用read(byte[] b )每次读取多个(b.length)字节数据(每次

最多读取多少个)到byte数组当中 

           while((len = is.read(b))!=-1){//将数据读到缓冲区b中

               System.out.println(“len=”+len);

               os.write(b);

           }

           os.close();


           is.close();

      }catch(Exception e){

           e.printStackTrace();

      }

}


          3 、 read (byte[] b) 方法, 从输入流中读取一定数量的字节,并将其存储在缓冲区数

组 b  中。以整数形式返回实际读取的字节数。

public 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();

           }

}


           第一个方法典型的确定就是处理效率低,不是某些特殊情况,很少使用它,下面说说第 2

个方法跟第 3 个方法,第 3 个方法的本本质其实就是第 2 个方法的特殊情况, 效果等同于:

             read(b, 0, b.length)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值