BufferedInputStream对象的read()怎么用? 30

BufferedInputStreambis=newBufferedInputStream(is);ByteArrayBufferbaf=newByteArrayBuff... BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while((current = bis.read()) != -1){
baf.append((byte)current);
}
单步调试跟进去看了以后发现当bis取到的值大于等于0的时候,current的值是正确的,但是当bis取到的值是负数的时候,current的值却还是正的,而且发现他们的绝对值之和是256,比如bis取到的值为-1的话,current就等于255,bis取到的值为-126的话,current就等于130...
不知道为什么,求高手指教...
展开
 我来答
twknq94
推荐于2018-04-18 · 超过13用户采纳过TA的回答
知道答主
回答量:101
采纳率:0%
帮助的人:0
展开全部
你也看到了,在FileInputStream里有一个说明是说此方法将阻塞,意思就是说在你读一个文件输入流的时候,当读到某个位置的时候,如果做一些其他处理(比如说接受一部分字节做一些处理等等)这个时候输入流在什么位置就是什么位置,不会继续往下读,而BufferedInputStream虽然也有一个read方法,但是从名字就可以看出,它带有一个缓冲区,它是一个非阻塞的方法,在你读到某个位置的时候,做一些处理的时候,输入流可能还会继续读入字节,这样就达到了缓冲的效果。
对于性能要求不高的时候,用哪个都无所谓,但是如果有性能要求,建议你还是用BufferedInputStream。
碧_清
2012-04-03
知道答主
回答量:1
采纳率:0%
帮助的人:1646
展开全部
因为从文件中read进来的是字符,而字符的范围是0~65535,那么强转成byte类型后就当然还是正的了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友91f49c4
2011-02-18 · TA获得超过1176个赞
知道小有建树答主
回答量:1683
采纳率:0%
帮助的人:677万
展开全部
在Java中byte类型是有符号的
bis.read()返回的是int
说到底就是byte和int之间的转化问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式