黑马程序员技术交流社区
标题:
BufferedInputStream的一个疑惑
[打印本页]
作者:
Stephen_Chow
时间:
2013-10-24 19:00
标题:
BufferedInputStream的一个疑惑
查询API知道:
read public int read() throws IOException
返回:
下一个数据字节,如果到达流末尾,则返回 -1。
问题:如果在读取一个字节数据的文件时,如果巧合了,其中的读到某个字节数据正好是-1(11111111一个byte),那么read返回的也是-1,这么一来循环读取就会终结。这样显然不对的,BUG吗?
源码太复杂,看不明白,不知道怎么解决的。
求大神给的指导,小弟先谢过了
作者:
烟花雨
时间:
2013-10-24 20:40
可能你理解错了吧。如API中说的下一个数据字节,如果到达流末尾,则返回 -1,这和读取字节没关系吧,返回的数据又不是读取的字节,返回的数据是用来判断到没到达流末尾。
作者:
Stephen_Chow
时间:
2013-10-24 20:57
烟花雨 发表于 2013-10-24 20:40
可能你理解错了吧。如API中说的下一个数据字节,如果到达流末尾,则返回 -1,这和读取字节没关系吧,返回的 ...
我试验过了,返回的是每一个字节数据,不管怎么样,还是谢谢你的回答。希望我们能一起进步
作者:
miedongdong
时间:
2013-10-29 11:05
会有这个情况,一旦读取到-1就结束,刚刚我回顾一下毕老师的视频,
【黑马程序员_毕向东_Java基础视频教程第19天-14-IO流(自定义字节流的缓冲区-read和write的特点)】
里面的自定义字节流的缓冲区就说到这个问题,视频是从拷贝MP3的问题引起的思考就说到这个问题;
你看到源码中的read方法是int类型的,而读文件却是读字节,这是因为read方法就是把byte提升为int,
此时-1的八位就变成32位,老师用&255来避免读到-1的情况,write方法就是把int强转为byte,也就是
只读取最后八位,这样就可以读取到所有的数据了。
如果我说的你理解不了,可以去看一下老师的视频
一起学习,一起加油哈
作者:
零下五度的水
时间:
2013-10-29 11:25
本帖最后由 零下五度的水 于 2013-10-29 11:27 编辑
我觉得,字节是 byte ,会照着 ASCII 读,ASCII 没有负数
返回值是用来判断的,不是用来输出的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2