黑马程序员技术交流社区

标题: 一个IO问题 [打印本页]

作者: 城市儒侠    时间: 2013-12-20 19:55
标题: 一个IO问题
本帖最后由 城市儒侠 于 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。

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


作者: 代文娟    时间: 2013-12-20 20:23
你把下面这两句话换一下位置,就正确了,因为你先存的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.         }
复制代码





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