请教高手 Java字节流 读取存数据于缓存时的问题
4个回答
展开全部
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); // 读取了多长的字节就写入多长的字节
}
展开全部
设置了byte做缓存 需要满才会out 当缓存没有满是不会输出 要等这个流关闭的时候才会输出
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
应该是没有指定数组长度的原因吧,具体原因不详.
fos.write(b, off, len);//指定长度,指定以后应该就不会出现多处的情况..
显然90abcd 是16进制,我感觉就像是溢出的位数.
fos.write(b, off, len);//指定长度,指定以后应该就不会出现多处的情况..
显然90abcd 是16进制,我感觉就像是溢出的位数.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是因为文件的长度不是1024的倍数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询