请教高手 Java字节流 读取存数据于缓存时的问题

如题所述

byte最后一次读取的长度比之前的要小。所以你byte数组尾巴那几位不是空的,是前一次读取的尾部。

设置长度是42或者更大时,你的byte数组一次性就把内容全部读取完了。while只执行一次,而设置为小于42的时候,就会多次执行while,把新读取的字节存放到byte数组中去。但是你最后一次的长度不是正好你设置的12而是6,所以新读取的6长度字节不能完全替换byte数组中前一次的数据。只能替换掉6个。因为数组长度是12,所以后6位还保存着前一次(倒数第二次读取)的数据。

可以这样修改,希望你能看懂。

int len = 0; // 字节长度
while((len = fis.read(b))>0){ // 将读取到的长度记录下来
  fos.write(b,0,len); // 读取了多长的字节就写入多长的字节
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-09-23
设置了byte做缓存 需要满才会out 当缓存没有满是不会输出 要等这个流关闭的时候才会输出
第2个回答  2014-09-23
应该是没有指定数组长度的原因吧,具体原因不详.
fos.write(b, off, len);//指定长度,指定以后应该就不会出现多处的情况..
显然90abcd 是16进制,我感觉就像是溢出的位数.
第3个回答  2014-09-23
是因为文件的长度不是1024的倍数
相似回答