PushBackInputStream 和 DataInputStream,如何推回双精度?



如果我想提前读取一个字节,如果不是'<',则将其推回,我可以这样做:

PushbackInputStream pbin=new PushbackInputStream(new FileInputStream("1.dat"));
int b = pbin.read();
if(b!='<')
pbin.unread(b);

但是,如果我想推回从DataInputStream读取的双精度,我该怎么办? 例如:

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 无法推回双精度,我该如何将双精度转换为字节数组?或者任何其他方式?

你不能用这种方式推回双倍。方法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

相关内容

  • 没有找到相关文章

最新更新