【问题标题】:PushBackInputStream and DataInputStream, how to push back a double?PushBackInputStream和DataInputStream,如何推回一个double?
【发布时间】:2018-01-28 14:39:19
【问题描述】:

如果我想提前读取一个字节,如果它不是'

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,我怎样才能将double转换为字节数组?或其他方式?

【问题讨论】:

    标签: java io inputstream datainputstream pushbackinputstream


    【解决方案1】:

    你不能那样推回双打。方法 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(doubleAsBytes); // push back the bytes
    

    【讨论】:

      猜你喜欢
      • 2013-10-15
      • 1970-01-01
      • 1970-01-01
      • 2016-12-31
      • 1970-01-01
      • 2013-03-07
      • 2012-08-24
      • 2011-08-02
      • 1970-01-01
      相关资源
      最近更新 更多