黑马程序员技术交流社区

标题: IO流中的Write(int)与WriteInt(int)的区别 [打印本页]

作者: 李月    时间: 2012-5-17 09:49
标题: IO流中的Write(int)与WriteInt(int)的区别
write(int):只将该整数的最低一个8位写入。剩余三个8位丢弃。
假如剩余三个8位是有效数据也同样丢弃吗?还是我的理解有误?

writerInt(int):一次写入四个字节。
作者: Fc10232    时间: 2012-5-17 10:06
write
public abstract void write(int b)
                    throws IOException将指定的字节写入此输出流。write 的常规协定是:向输出流写入一个字节。要写入的字节是参数 b 的八个低位。b 的 24 个高位将被忽略。


我个人理解是:                   byte---->int
                                       8--------->32
write 对接收的byte进行转型   所以·········其中的24 高位 可以忽略   
作者: —__    时间: 2012-5-17 10:24
write(int):只将该整数的最低一个8位写入。剩余三个8位丢弃。
假如剩余三个8位是有效数据也同样丢弃吗?还是我的理解有误?

对于楼主的问题简单来说几个概念
首先 一个整数是用 4个8位的 二进制写成 比如 00000000 00000000 00000000 00000011 = 3;代表数字3

而当你用二进制进行计算时 比如 00000000 00000000 00000000 00000011  + 00000000 00000000 00000000 11111110 =00000000 00000000 00000001 00000001
而 write(int) 说是写入 简单说就是取值 00000001 而前面的就直接当做损失精度来处理,也就是无论前面的是什么 都忽略不计
作者: 张文建    时间: 2012-5-17 10:40
在API文档中是这么说的:write(int b)将指定的字节写入此输出流。write 的常规协定是:向输出流写入一个字节。要写入的字节是参数 b 的八个低位。b 的 24 个高位将被忽略。
也就是说write一次只能写入一个字节
作者: 永恒之翼网络    时间: 2012-5-17 15:24
“write(int):只将该整数的最低一个8位写入。剩余三个8位丢弃。
假如剩余三个8位是有效数据也同样丢弃吗?还是我的理解有误?”本来就是这样的呀,所以才提供了writeInt(int)方法来决绝这一问题。
write(int)对于字节流来说,就是将该整数的二进制形式的最低8位写入;对于字符流来说就是将该整数的二进制形式的最低16位写入。所以write方法对操作int有局限,API才提供了writeInt方法。




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