A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Stephen_Chow 中级黑马   /  2013-10-24 19:00  /  1293 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

查询API知道:
         read public int read()  throws IOException
        返回:
        下一个数据字节,如果到达流末尾,则返回 -1。


      问题:如果在读取一个字节数据的文件时,如果巧合了,其中的读到某个字节数据正好是-1(11111111一个byte),那么read返回的也是-1,这么一来循环读取就会终结。这样显然不对的,BUG吗?
源码太复杂,看不明白,不知道怎么解决的。
求大神给的指导,小弟先谢过了
        

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

4 个回复

倒序浏览
可能你理解错了吧。如API中说的下一个数据字节,如果到达流末尾,则返回 -1,这和读取字节没关系吧,返回的数据又不是读取的字节,返回的数据是用来判断到没到达流末尾。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报 0 1
烟花雨 发表于 2013-10-24 20:40
可能你理解错了吧。如API中说的下一个数据字节,如果到达流末尾,则返回 -1,这和读取字节没关系吧,返回的 ...

我试验过了,返回的是每一个字节数据,不管怎么样,还是谢谢你的回答。希望我们能一起进步
回复 使用道具 举报
会有这个情况,一旦读取到-1就结束,刚刚我回顾一下毕老师的视频,
【黑马程序员_毕向东_Java基础视频教程第19天-14-IO流(自定义字节流的缓冲区-read和write的特点)】
里面的自定义字节流的缓冲区就说到这个问题,视频是从拷贝MP3的问题引起的思考就说到这个问题;

你看到源码中的read方法是int类型的,而读文件却是读字节,这是因为read方法就是把byte提升为int,
此时-1的八位就变成32位,老师用&255来避免读到-1的情况,write方法就是把int强转为byte,也就是
只读取最后八位,这样就可以读取到所有的数据了。

如果我说的你理解不了,可以去看一下老师的视频
一起学习,一起加油哈
回复 使用道具 举报
本帖最后由 零下五度的水 于 2013-10-29 11:27 编辑

我觉得,字节是 byte ,会照着 ASCII 读,ASCII 没有负数
返回值是用来判断的,不是用来输出的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马