gpt4 book ai didi

java - 如何获得支持标记/重置的ObjectInputStream?

转载 作者:行者123 更新时间:2023-12-02 03:26:27 25 4
gpt4 key购买 nike

我正在尝试获取一个ObjectInputStream,它允许我从中读取数据,如果类型不正确,则将数据放回到流中(使用mark reset)以供其他一些代码处理。我之前尝试将从 Socket 检索到的 InputStream (以下示例中的 s)包装在 BufferedInputStream 中将其包装在 ObjectInputStream 中,因为我认为这是解决方案,但是当调用 ois.markSupported() 时,仍然返回 false。以下是该尝试:

ois = new ObjectInputStream(new BufferedInputStream(s.getInputStream()));

非常感谢任何帮助!

最佳答案

我会在流之上构建更高级别的抽象。像这样的东西(伪代码,未最终确定):

public class Buffer {
private final ObjectInputStream in;

private Object current;

public Buffer(ObjectInputStream in) {
this.in = in;
}

public Object peek() {
if (current == null) {
current = in.readObject();
}
return current;
}

public void next() {
current = in.readObject();
}
}

您可以重复使用 peek() 来获取当前对象,如果适合您,请调用 next() 转到下一个对象。

当然,您需要处理异常、流的结束、正确关闭它等。但是您应该明白这个想法。

或者,如果您可以读取内存中的所有内容,则可以使用流中的对象创建一个队列,然后传递该队列并使用 peek()poll ().

关于java - 如何获得支持标记/重置的ObjectInputStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38814424/

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