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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 葛晓红 中级黑马   /  2013-5-15 22:45  /  1448 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 葛晓红 于 2013-5-16 20:30 编辑

求解:IO流中的read方法返回类型为什么是int型?

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

2 个回复

倒序浏览
API中这么说的:read方法从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。

也就是说 read() 一次就读一个字节,一个字节八位(2^8 = 256),转化成int类型之后就是返回 0--255 之间的一个数了。

希望能明白...
回复 使用道具 举报
结合老师的视频和我的理解如下:
按理read()方法应该返回所读到的字节,但它返回了int类型。这是因为它在内部做了强制的转换,将一个8位的二进制数转化为32位的二进制的数。这样可以避免一种情况:假如当我们所读到第一个字节为8个1即1111111,实际上它代表-1,而32为的int类型代表32个1,但它并不代表文件内容已经读取完,如果不做处理,将无法读取文件内容。所以我们就必须把它和255(255是32位的二进制,低八位为1,高24位为0)相与,取出低八位的1。获得的结果为32位的255,这样read返回的32就不是-1.从而就避免了这种情况,保证了数据的正确读取。在write()写操作时,是其在内部强制性的丢弃高24位,保留低8位,保证了数据的一致性。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马