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...
不知道为什么,求高手指教... 展开
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...
不知道为什么,求高手指教... 展开
3个回答
展开全部
你也看到了,在FileInputStream里有一个说明是说此方法将阻塞,意思就是说在你读一个文件输入流的时候,当读到某个位置的时候,如果做一些其他处理(比如说接受一部分字节做一些处理等等)这个时候输入流在什么位置就是什么位置,不会继续往下读,而BufferedInputStream虽然也有一个read方法,但是从名字就可以看出,它带有一个缓冲区,它是一个非阻塞的方法,在你读到某个位置的时候,做一些处理的时候,输入流可能还会继续读入字节,这样就达到了缓冲的效果。
对于性能要求不高的时候,用哪个都无所谓,但是如果有性能要求,建议你还是用BufferedInputStream。
对于性能要求不高的时候,用哪个都无所谓,但是如果有性能要求,建议你还是用BufferedInputStream。
展开全部
因为从文件中read进来的是字符,而字符的范围是0~65535,那么强转成byte类型后就当然还是正的了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在Java中byte类型是有符号的
bis.read()返回的是int
说到底就是byte和int之间的转化问题
bis.read()返回的是int
说到底就是byte和int之间的转化问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询