PushBackInputStream 和DataInputStream,如何推回一个double?
PushBackInputStream and DataInputStream, how to push back a double?
如果我想提前读取一个字节,如果不是'<'则将其推回,我可以这样做:
PushbackInputStream pbin=new PushbackInputStream(new FileInputStream("1.dat"));
int b = pbin.read();
if(b!='<')
pbin.unread(b);
但是如果我想推回从DataInputStream 读取的double,我该怎么办?
例如:
PushbackInputStream pbin1=null;
DataInputStream din=new DataInputStream(
pbin1=new PushbackInputStream(
new FileInputStream("1.dat")
)
);
double d = din.readDouble();
pbin1.unread(d);
最后一行pbin1.unread(d);
无法编译,因为PushbackInputStream不能推回一个double,我如何将double转换为字节数组?或任何其他方式?
你不能那样推回加倍。方法 DataInputStream.readDouble()
读取 8 个字节来创建一个双精度数,你不能只将一个双精度数传递给 PushbackInputStream.unread()
并期望他知道如何处理。
要实现您想要的效果,解决方案很简单:
PushbackInputStream pbin1=new PushbackInputStream(new FileInputStream("1.dat"));
DataInputStream din=new DataInputStream(pbin1);
double d = din.readDouble(); // Get the double out of the stream
byte[] doubleAsBytes = new byte[8];
ByteBuffer.wrap(doubleAsBytes).putDouble(d); // transform the double into his byte representation
pbin1.unread(doubleAsBytes); // push back the bytes
如果我想提前读取一个字节,如果不是'<'则将其推回,我可以这样做:
PushbackInputStream pbin=new PushbackInputStream(new FileInputStream("1.dat"));
int b = pbin.read();
if(b!='<')
pbin.unread(b);
但是如果我想推回从DataInputStream 读取的double,我该怎么办? 例如:
PushbackInputStream pbin1=null;
DataInputStream din=new DataInputStream(
pbin1=new PushbackInputStream(
new FileInputStream("1.dat")
)
);
double d = din.readDouble();
pbin1.unread(d);
最后一行pbin1.unread(d);
无法编译,因为PushbackInputStream不能推回一个double,我如何将double转换为字节数组?或任何其他方式?
你不能那样推回加倍。方法 DataInputStream.readDouble()
读取 8 个字节来创建一个双精度数,你不能只将一个双精度数传递给 PushbackInputStream.unread()
并期望他知道如何处理。
要实现您想要的效果,解决方案很简单:
PushbackInputStream pbin1=new PushbackInputStream(new FileInputStream("1.dat"));
DataInputStream din=new DataInputStream(pbin1);
double d = din.readDouble(); // Get the double out of the stream
byte[] doubleAsBytes = new byte[8];
ByteBuffer.wrap(doubleAsBytes).putDouble(d); // transform the double into his byte representation
pbin1.unread(doubleAsBytes); // push back the bytes