2

バイトを先読みし、「<」でない場合はプッシュバックする場合は、次のように実行できます。

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 をプッシュバックできないため、最後の行をコンパイルできません。

4

1 に答える 1

1

そのようにダブルを押し戻すことはできません。メソッドDataInputStream.readDouble()は double を作成するために 8 バイトを読み取ります。単に 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
于 2017-08-20T11:29:52.907 に答える