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

原地址:http://blog.csdn.net/world_java/article/details/7539467


[java]  view plain  copy
 print ?
  1. //为什么read()方法返回的是int类型而不是byte  
  2. 1个字节8位,(byte)  
  3. 4个字节32位,(int)  
  4. byte  -1 --->int -1(将byte提升为int)  
  5. byte 是1一个字节,即8位,如果取到连续11111111 (81)  
  6. 为了避免读到连续81(就是-1)和定义的结束标记-1相同(read()返回-1就是读到末尾)。  
  7. 所以在保留11111111的基础上,在转成int类型时,前面24位补0而不补1.  
  8. 如果是补1  
  9. 11111111 11111111 11111111 11111111  
  10. 不还是-1?是-1的原因是因为前面24位补的是1,只要在前面补0,  
  11. 既可以保留原字节数据不变(最低8位),又可以避免-1的出现。  
  12.  11111111 11111111 11111111 11111111                              
  13. &00000000 00000000 00000000 11111111  
  14. ----------------------------------------  
  15.  00000000 00000000 00000000 11111111  
  16.   
  17. //那提升为int 读一个字节不就变成4个字节了么?那往外写的时候大小不就变成原来数据的4倍了么?  
  18. 答:read 方法在提升的同时保证了不出现-1的情况,但是write有一个强转动作,就是取最低8位,  
  19.     所以说写出去的还是有效数据,保证原数据没有变化!  

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值