黑马程序员技术交流社区

标题: baos.write(200)向输入流中写入的怎么不是 200 [打印本页]

作者: 不抛弃不放弃    时间: 2013-11-11 00:58
标题: baos.write(200)向输入流中写入的怎么不是 200
我向输出流中写入200,但读取输入流中的内容时,发现是-56,这是怎么回事?
public static void main(String []args){
ByteArrayOutputStream baos= new ByteArrayOutputStream();

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



}

作者: 零下五度的水    时间: 2013-11-11 01:35
你该知道你用的是 ByteArray 的输出流吧,byte 是 -128~127的
127之后是-128,然后不停的++,自己算吧
作者: 文涛    时间: 2013-11-11 01:57
因为你使用了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




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