gpt4 book ai didi

java - PushBackInputStream和DataInputStream,如何推回一个double?

转载 作者:太空宇宙 更新时间:2023-11-04 11:13:06 25 4
gpt4 key购买 nike

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

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 个字节来创建一个 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

关于java - PushBackInputStream和DataInputStream,如何推回一个double?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45781559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com