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

 我来答
典勇嘉谋
推荐于2016-01-29 · TA获得超过362个赞
知道小有建树答主
回答量:308
采纳率:100%
帮助的人:137万
展开全部

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); // 读取了多长的字节就写入多长的字节
}
野鱼老Y
2014-09-23
知道答主
回答量:3
采纳率:0%
帮助的人:3868
展开全部
设置了byte做缓存 需要满才会out 当缓存没有满是不会输出 要等这个流关闭的时候才会输出
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xwthswq
2014-09-23 · 超过16用户采纳过TA的回答
知道答主
回答量:63
采纳率:0%
帮助的人:43.5万
展开全部
应该是没有指定数组长度的原因吧,具体原因不详.
fos.write(b, off, len);//指定长度,指定以后应该就不会出现多处的情况..
显然90abcd 是16进制,我感觉就像是溢出的位数.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhouyingxitemp
2014-09-23 · 超过44用户采纳过TA的回答
知道小有建树答主
回答量:101
采纳率:0%
帮助的人:69.1万
展开全部
是因为文件的长度不是1024的倍数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式