无法在Java中刷新DataOutputStream

时间:2015-05-12 10:46:00

标签: java arrays dataoutputstream

我想在DataInputStream中放入一个double数组,并在控制台中使用DataOutputStream进行打印。我试图先将它转换为字节数组。 我不能flush()DataOutputStream,所以它在控制台中打印。 System.out.print(c)有效。

double[] b = { 7, 8, 9, 10 };

//double[] to byte[]
byte[] bytes = new byte[b.length * Double.SIZE];
ByteBuffer buf = ByteBuffer.wrap(bytes);
for (double d : b)
    buf.putDouble(d);
InputStream is = new ByteArrayInputStream(bytes);
DataInputStream dis = new DataInputStream(is);
DataOutputStream dos = new DataOutputStream(System.out);

int c;
try{
    while( (c = dis.read()) != -1){
        //System.out.print(c);
        dos.writeInt(c);
    }
    dos.flush();
}
catch(Exception e){
    System.out.println("error: " + e);
}

使用System.out.print(c)输出,我想要实现的目标:642800000064320000006434000000643600000000000000000000000000000000[...]

1 个答案:

答案 0 :(得分:1)

将字节写入控制台可能会导致控制字符(无法打印)并导致意外结果。如果您绝对需要查看文本表示,则可以考虑使用ASCII转换器,例如Base64。

但在您的示例中,请替换

带有dos.writeInt(c);

dos.writeChars(Integer.toString(n));

你会得到预期的结果。 writeInt写入表示当前int的4个字节,这可能导致各种控制字符。 writeChars会写一系列字符。