[重学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);
        }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值