我试图获得一个允许我从中读取数据的ObjectInputStream
,如果它不是正确的类型,请将数据放回流中(使用{ {1}}和mark
)用于处理其他一些代码。我已尝试将reset
(InputStream
中检索到的Socket
包裹在s
中,然后将其包装在BufferedInputStream
中我认为是解决方案,但是当调用ObjectInputStream
时仍然返回false。以下是尝试:
ois.markSupported()
任何帮助都非常感谢!
答案 0 :(得分:2)
我会在流的顶部构建一个更高级别的抽象。像这样的东西(伪代码,没有最终确定):
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()转到下一个。
当然,你需要处理异常,流的结束,正确关闭等等。但你应该明白这一点。
或者,如果您可以只读取内存中的所有内容,那么请执行此操作并使用流中的对象创建一个Queue,然后传递该Queue并使用peek()
和poll()
。