黑马程序员技术交流社区
标题:
结果为什么不是想象的值?
[打印本页]
作者:
yangyinhui
时间:
2013-4-5 18:48
标题:
结果为什么不是想象的值?
本帖最后由 yangyinhui 于 2013-4-5 19:41 编辑
private static void demo1() throws FileNotFoundException, IOException {
FileOutputStream fos = new FileOutputStream("data.txt");
fos.write(2333); // byte
fos.write(232);
fos.write(393);
fos.close();
FileInputStream fis = new FileInputStream("data.txt");
System.out.println(fis.read());
System.out.println(fis.read());
System.out.println(fis.read());
fis.close();
}
}
结果为什么不是: 2333
232
393
输出结果是 29
232
137
复制代码
作者:
徐升2013
时间:
2013-4-5 19:07
本帖最后由 徐升2013 于 2013-4-5 19:13 编辑
int a = 2333;
byte b = (byte)a;
System.out.println(b);
你在程序中加上这两句话就明白了~!~
你在使用Write方法时调用的是参数类型为int的write方法。
而你在读的时候是调用的读取下一字节的read方法。存入的是int类型 ,取出的时候是byte类型,强制转换的结果之后就是这个样子了 。
作者:
whs_nk
时间:
2013-4-5 19:19
FileOutputStream是字节流,fos.write()写入的只是一个字节大小的数据,无符号数的表示范围为0到255,而393和2333明显超过了这个范围。这里就拿2333来说吧,二进制表示为1000,0001,1101低八位为0001,1101,正好是29,存入的是29,不是2333,所以取出的就是29咯,393同理可以分析。希望能帮到你哦
作者:
随便
时间:
2013-4-5 19:30
正如楼上所说的,int强转byte型,要丢失24位二进制数。
作者:
杜加璇
时间:
2013-4-5 19:37
FileInputStream,FileOutputStream是字节流,读写时,每次读写的是一个字节的数据,字节数据是0-255之间的数,在这个范围内的数读写是不会不改变的233没有超过255所以输出结果还是233但是如果超过255程序也只会读写这个数二进制的后八位所以2333输出结果是29,393输出结果是137。
作者:
yangyinhui
时间:
2013-4-5 19:41
知道了,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2