ByteArrayOutputStream baos = 
                        new ByteArrayOutputStream(); 
    DataOutputStream dos = 
                        new DataOutputStream(baos);
    try {
      dos.writeDouble(Math.random());
      dos.writeBoolean(true);      ByteArrayInputStream bais = 
          new ByteArrayInputStream(baos.toByteArray());
      DataInputStream dis = new DataInputStream(bais);      System.out.println(dis.readDouble());
      System.out.println(dis.readBoolean());      dos.close();  dis.close();
    } 
catch (IOException e) {
      e.printStackTrace();}如上一个简单的例子,API说ByteArrayOutputStream()是将数据写入到byte数组中,可是套上了DataOutputStream就往里面写其他类型的数据,byte数组中难道是可以装byte类型以外的数据类型吗? 其他类型的数组也可以装类型不同的数据吗? 可能我的问题比较菜,大家见笑了。 请各位指点一二,thanks!

解决方案 »

  1.   

    你打印下
    System.out.print(Arrays.toString(baos.toByteArray()));
    - -
      

  2.   

    [63, -31, -24, -86, -98, 124, -24, -117, 1]
    0.5596516700236561
    true楼上的朋友,这是我加了System.out.print(Arrays.toString(baos.toByteArray()));后的运行结果。上面是打印了一个字节数组,数组长度也正好是9个byte,和一个double + 一个boolean得长度相同。 不过我不太明白你的意思呵呵,我比较笨。能说清楚一点吗?
      

  3.   

    在Java里,code层面,字节是最小存储单元。其它的类型都是字节的组合。比如short,char是2个byte,boolean也可以认为是一个byte,int,float是4字节,double,long是8字节,......注意看下java的序列化和反序列化,对象可以从io流里读取或写入,而io流也是基于字节的.
      

  4.   

    你在API文档中看下writeDouble(double v)方法,写的很清楚了:
           使用 Double 类中的 doubleToLongBits 方法将 double 参数转换为一个 long 值,然后将该 long 值以 8-byte 值形式写入基础输出流中,先写入高字节。