我想在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[...]
答案 0 :(得分:1)
将字节写入控制台可能会导致控制字符(无法打印)并导致意外结果。如果您绝对需要查看文本表示,则可以考虑使用ASCII转换器,例如Base64。
但在您的示例中,请替换
带有dos.writeInt(c);
的 dos.writeChars(Integer.toString(n));
你会得到预期的结果。 writeInt
写入表示当前int的4个字节,这可能导致各种控制字符。 writeChars
会写一系列字符。