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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李月 中级黑马   /  2012-5-17 09:49  /  2605 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

write(int):只将该整数的最低一个8位写入。剩余三个8位丢弃。
假如剩余三个8位是有效数据也同样丢弃吗?还是我的理解有误?

writerInt(int):一次写入四个字节。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
write
public abstract void write(int b)
                    throws IOException将指定的字节写入此输出流。write 的常规协定是:向输出流写入一个字节。要写入的字节是参数 b 的八个低位。b 的 24 个高位将被忽略。


我个人理解是:                   byte---->int
                                       8--------->32
write 对接收的byte进行转型   所以·········其中的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 而前面的就直接当做损失精度来处理,也就是无论前面的是什么 都忽略不计

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
在API文档中是这么说的:write(int b)将指定的字节写入此输出流。write 的常规协定是:向输出流写入一个字节。要写入的字节是参数 b 的八个低位。b 的 24 个高位将被忽略。
也就是说write一次只能写入一个字节
回复 使用道具 举报
“write(int):只将该整数的最低一个8位写入。剩余三个8位丢弃。
假如剩余三个8位是有效数据也同样丢弃吗?还是我的理解有误?”本来就是这样的呀,所以才提供了writeInt(int)方法来决绝这一问题。
write(int)对于字节流来说,就是将该整数的二进制形式的最低8位写入;对于字符流来说就是将该整数的二进制形式的最低16位写入。所以write方法对操作int有局限,API才提供了writeInt方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马