无法在 Java 中刷新 DataOutputStream

Can't flush DataOutputStream in Java

我想将双精度数组放入 DataInputStream 并在控制台中使用 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[...]

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

但在您的示例中,替换

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

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