黑马程序员技术交流社区

标题: IO问题 [打印本页]

作者: 黑马-刘昌文    时间: 2012-4-10 16:49
标题: IO问题
为什么在写入单个字符的时候 write(int c),c为什么是int类型的,按我想应该是char类型的才对嘛?谁给我解释哈
作者: 蒙武辉    时间: 2012-4-10 17:00
write(int b)
将指定的字节写入此输出流。write 的常规协定是:向输出流写入一个字节。要写入的字节是参数 b 的八个低位。b 的 24 个高位将被忽略。
write(byte[] b)
将 b.length 个字节从指定的字节数组写入此输出流。write(b) 的常规协定是:应该与调用 write(b, 0, b.length) 的效果完全相同。
作者: izwj    时间: 2012-4-10 17:13
write(int c),int read()操作的都是字符编码表对应的数字。任何数据在内存中都是以二进制数存在的。
作者: 张志阳    时间: 2012-4-10 17:13
续楼上:毕老师说 FileReader是包装了 InputStreamReader 流,但是InputStreamReader 读取的字符,如果已到达流的末尾,则返回 -1 。如果读取单个char值为-1的字符,那么误认为结束标记,这是个漏洞。所以返回int就是将其值进行类型提升,那么char值为-1的字符提升后就不再是-1,又考虑到效率,(提升的越少,那么单位数据越短,效率越高),读取之后write()的时候会进行强转还原。就是这样,理解的不好还望谅解。
作者: 未长法    时间: 2012-4-10 17:33
因为有可能会读到连续8个二进制1的情况,8个二进制1对应的十进制是-1.
那么就会数据还没有读完,就结束的情况。因为我们判断读取结束是通过结尾标记-1来确定的。
所以,为了避免这种情况将读到的字节进行int类型的提升。
并在保留原字节数据的情况前面了补了24个0,变成了int类型的数值。


而在写入数据时,只写该int类型数据的最低8位。




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