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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我向输出流中写入200,但读取输入流中的内容时,发现是-56,这是怎么回事?
public static void main(String []args){
ByteArrayOutputStream baos= new ByteArrayOutputStream();

baos.write(200);
System.out.println(Arrays.toString(baos.toByteArray()));



}

2 个回复

倒序浏览
你该知道你用的是 ByteArray 的输出流吧,byte 是 -128~127的
127之后是-128,然后不停的++,自己算吧
回复 使用道具 举报
因为你使用了ByteArray,这个数组流每个单位为字节,就是8位,也就是8个2进制位,八个2进制位一共可以表示256个数字,第一位用来表示正负,0为正,1为负,8位全部为0就表示0,符号位为1,其他为0就表示-128,所以该数字的范围就是-128到127,加上0刚刚256个数字。
    这里就很明显了,最大的正数只能到127,你超出了范围,于是产生了溢出,溢出的时候会循环计数,也就是说,如果你的数字是128那么实际上就是溢出了一个,就成了-128,如果溢出了两个,例如数字129就是-127,当你溢出了73个的时候,那么数字就是-128+73-1=-56,所以明显你输出的就是-56

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马