无法在 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
改为写入字符序列。
我想将双精度数组放入 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
改为写入字符序列。