Java:文件流read()、write()方法,数组大小含义

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

解释下这段代码:

        定义的buffer数组用来缓存通过input读入的数据,因此定义的buffer大小只是决定了一次传入缓存的字节数量(注意:是while循环时一次传入的可读长度,而不是一直向buffer内传数据只能传1024),当然也可以将byte[ ]初始值定义成更大值。(切记:如果write时只使用write(buffer)而不是用长度n限制会由于buffer的初始值大小造成最终的输出流有问题。比如读取一个2049字节大小的文件时,初始值为byte[1024*2],第一次input读取时buffer被填满2048个字节,但下次读取时还剩2049-2048=1位字节未读取,所以buffer缓存中仅是第一位内容更新,其余位置还是被上次读取的数据占位。因此output第二次写入的大小还是2048,这样最终写入文件的大小就是2048*2。)

       正如上文提到read(buffer)便是一次读1024字节的数据(read()表示一次读一个字节,即可读字节数为buffer.length),n表示每次循环能读到的下一段数据长度,output.write(buffer,0,n)则是根据读到的buffer数据写入output指向的文件。write()源码<code> write(b,off,len)</ code>指出: <code> OutputStream </ code>的<code> write </ code>方法在每个要写出的字节上调用一个参数的write方法。鼓励子类重写此方法并提供更有效的实现。如果<code> b </ code>是<code> null </ code>,则抛出<code>NullPointerException </ code>。如果<code> off </ code>为负数,或者<code> len </ code>为负数,或者<code> off + len </ code>大于数组<code> b </ code的长度>,然后抛出<tt> IndexOutOfBoundsException </ tt>。

      while循环中的-1则是EOF(End Of File)结束标志,表示文件读取结束。因为ASCII代码值的范围是0~255,不可能出现-1。

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值