黑马程序员技术交流社区

标题: IO流中的read方法返回类型为什么是int型 [打印本页]

作者: 葛晓红    时间: 2013-5-15 22:45
标题: IO流中的read方法返回类型为什么是int型
本帖最后由 葛晓红 于 2013-5-16 20:30 编辑

求解:IO流中的read方法返回类型为什么是int型?
作者: 石贤芝    时间: 2013-5-15 23:32
API中这么说的:read方法从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。

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

希望能明白...
作者: 曾德强    时间: 2013-5-15 23:36
结合老师的视频和我的理解如下:
按理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位,保证了数据的一致性。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2