[重学Java基础][Java IO流][Exter.2]IO流中几种不同的读写方法的区别

[重学Java基础][Java IO流][Exter.2]IO流中几种不同的读写方法的区别

Read 读入方法

  • ### read():
    一般是这种形式
public int read()

1.从流数据中读取的是一个一个字节(byte)
2.返回的是字节的(0-255)内的字节值
3.连续读取 读入一个就移动游标到下一个位置继续读取 读取到结尾返回-1 表示结束
4.如果不支持标记 则不可重复读

一般用于连续读取

代码示例

      BufferedInputStream bis=……
        int i=0;
        while((i=bis.read())!=-1)
        {
            //处理……
        }

  • ### read(byte[] bytes)
    一般是这种形式
public int read(byte b[])

1.从读取流读取指定长度的字节,如果比如文件总共是102个字节
2.我们定义的数组长度是10,那么默认前面10次都是读取10个长度
最后一次不够十个,那么读取的是2个,剩余部分是填充的 ‘0’
3.这十一次读取,每次都是放入10个长度的数组.

一般用于带缓冲读取 可以加快读取速度
代码示例

        BufferedInputStream bis=……
        byte[] bytes=new byte[4096];
        int i=0;
        while((i=bis.read(bytes))!=-1)
        {
            //处理……
        }

  • ### read(byte[] bytes,int off ,int len)
    一般是这种形式
public int read(byte b[], int off, int len)

1.从读取流读取一定数量的字节,如果比如文件总共是102个字节
2.我们定义的数组长度是10,但是这里我们写read(bytes,0,9)那么每次往里面添加的(将只会是9个长度),就要读12次,最后一次放入3个.
3.所以一般读取流都不用这个而是用上一个方法:read(byte[]);


Write 写出方法

  • ### write(int i);
public void write(int b) 

直接往流写入字节形式的(0-255)int值.


  • ### write(byte[] bytes);
 public void write(byte b[])

往流里边写入缓冲字节数组中的所有内容, 数组有效内容不足整个数组长度 剩余的填充值’0’ 也会别写入到输出流
所以一般写入不用此方法 而用下面那个方法 和Read刚好是反的


  • ### write(byte[] bytes,int off,int len);
public void write(byte b[], int off, int len)

1.这个是更严谨的写法,在外部定义len,然后每次len都等于流往数组中存放的长度
2.如上述read(bytes),前面每次都放入十个,第十一次放入的是2个,如果用第二种write(bytes),将会写入输出流十一次,每次写入十个长度,造成后面有8个空的,比原来的内容多了
3.所以用write(byte[] bytes,int off,int len);就不会出现多出来的空的情况,因为最后一次len不同

示例

     FileInputStream fileInputStream = ……;
     byte[] buffer = new byte[buffersize];
     int len = 0;
     while (-1 != (n = input.read(buffer))) {
            output.write(buffer, 0, len);
     }

总结

所以除非文件很小 可以直接使用直接读写
通常情况小都使用缓存式读写
- 完整代码示例

        BufferedInputStream bis = ……
        BufferedOutputStream bous=……
        byte[] bytes = new byte[4096];
        int len = 0;
        while (-1 != (len = bis.read(bytes))) {
            bous.write(bytes,0,len);
        }

猜你喜欢

转载自blog.csdn.net/u011863951/article/details/80549690