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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yangyinhui 中级黑马   /  2013-4-5 18:48  /  1231 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yangyinhui 于 2013-4-5 19:41 编辑
  1. private static void demo1() throws FileNotFoundException, IOException {
  2.         FileOutputStream fos = new FileOutputStream("data.txt");
  3.         fos.write(2333);                // byte
  4.         fos.write(232);
  5.         fos.write(393);
  6.         fos.close();
  7.         
  8.         FileInputStream fis = new FileInputStream("data.txt");
  9.         System.out.println(fis.read());
  10.         System.out.println(fis.read());
  11.         System.out.println(fis.read());
  12.         fis.close();
  13. }

  14. }
  15. 结果为什么不是:           2333
  16.                           232
  17.                           393
  18.   
  19.   
  20.   输出结果是                 29
  21.                           232
  22.                           137
  23.    

复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 徐升2013 于 2013-4-5 19:13 编辑

int a = 2333;
                byte b = (byte)a;
                System.out.println(b);

你在程序中加上这两句话就明白了~!~

你在使用Write方法时调用的是参数类型为int的write方法。
而你在读的时候是调用的读取下一字节的read方法。存入的是int类型 ,取出的时候是byte类型,强制转换的结果之后就是这个样子了 。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
FileOutputStream是字节流,fos.write()写入的只是一个字节大小的数据,无符号数的表示范围为0到255,而393和2333明显超过了这个范围。这里就拿2333来说吧,二进制表示为1000,0001,1101低八位为0001,1101,正好是29,存入的是29,不是2333,所以取出的就是29咯,393同理可以分析。希望能帮到你哦

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
正如楼上所说的,int强转byte型,要丢失24位二进制数。
回复 使用道具 举报
FileInputStream,FileOutputStream是字节流,读写时,每次读写的是一个字节的数据,字节数据是0-255之间的数,在这个范围内的数读写是不会不改变的233没有超过255所以输出结果还是233但是如果超过255程序也只会读写这个数二进制的后八位所以2333输出结果是29,393输出结果是137。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

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