您的位置:首页 > 其它

为什么IO读取流的read方法返回的是int而不是byte的原因!

2012-05-06 14:34 537 查看
//为什么read()方法返回的是int类型而不是byte
1个字节8位,(byte)
4个字节32位,(int)
byte  -1 --->int -1(将byte提升为int)
byte 是1一个字节,即8位,如果取到连续11111111 (8个1)
为了避免读到连续8个1(就是-1)和定义的结束标记-1相同(read()返回-1就是读到末尾)。
所以在保留11111111的基础上,在转成int类型时,前面24位补0而不补1.
如果是补1
11111111 11111111 11111111 11111111
不还是-1?是-1的原因是因为前面24位补的是1,只要在前面补0,
既可以保留原字节数据不变(最低8位),又可以避免-1的出现。
11111111 11111111 11111111 11111111
&00000000 00000000 00000000 11111111
----------------------------------------
00000000 00000000 00000000 11111111

//那提升为int 读一个字节不就变成4个字节了么?那往外写的时候大小不就变成原来数据的4倍了么?
答:read 方法在提升的同时保证了不出现-1的情况,但是write有一个强转动作,就是取最低8位,
所以说写出去的还是有效数据,保证原数据没有变化!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  byte io
相关文章推荐