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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 城市儒侠 中级黑马   /  2013-12-20 19:55  /  1417 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 城市儒侠 于 2013-12-20 21:20 编辑
  1. import java.io.*;

  2. public class Test {
  3. public static void main(String[] args) {
  4. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  5. DataOutputStream dos = new DataOutputStream(baos);
  6. try {
  7. dos.writeDouble(Math.random());
  8. dos.writeBoolean(true);
  9. ByteArrayInputStream bais = new ByteArrayInputStream(
  10. baos.toByteArray());
  11. System.out.println(bais.available());
  12. DataInputStream dis = new DataInputStream(bais);
  13. System.out.println(dis.readBoolean());
  14. System.out.println(dis.readDouble());
  15. dos.close();
  16. dis.close();
  17. } catch (IOException e) {
  18. e.printStackTrace();
  19. }
  20. }
  21. }
复制代码


我这个代码的作用是:

向内存写了一个随机数,一个boolean。

可是为什么我运行结果,取出的是负数呢?

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

1 个回复

倒序浏览
你把下面这两句话换一下位置,就正确了,因为你先存的double型的又存的boolean型的,而你先读的boolean的又读的double型的,可能是内部读取时产生的错误原因:
dos.writeDouble(Math.random());
dos.writeBoolean(true);
修改的代码如下
  1. public class Test {
  2.         public static void main(String[] args) {
  3.         ByteArrayOutputStream baos = new ByteArrayOutputStream();
  4.         DataOutputStream dos = new DataOutputStream(baos);
  5.         try {       
  6.         dos.writeBoolean(true);
  7.         dos.writeDouble(Math.random());       
  8.         ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
  9.         System.out.println(bais.available());
  10.         DataInputStream dis = new DataInputStream(bais);
  11.         System.out.println(dis.readBoolean());
  12.         System.out.println(dis.readDouble());
  13.         dos.close();
  14.         dis.close();
  15.         } catch (IOException e) {
  16.         e.printStackTrace();
  17.         }
  18.         }
  19.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

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