PushBackInputStream和DataInputStream,如何推回双?

时间:2017-08-20 11:18:37

标签: java io inputstream datainputstream pushbackinputstream

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

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无法推回一个double,我怎样才能修改双字节数组?或者其他任何方式?

1 个答案:

答案 0 :(得分:0)

你不能以这种方式推回双人。方法DataInputStream.readDouble()读取8个字节来创建一个double,你不能只将一个double传递给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(bytes); // push back the bytes