如何获得支持mark / reset的ObjectInputStream?

时间:2016-08-07 13:02:41

标签: java objectinputstream

我试图获得一个允许我从中读取数据的ObjectInputStream,如果它不是正确的类型,请将数据放回流中(使用{ {1}}和mark)用于处理其他一些代码。我已尝试将resetInputStream中检索到的Socket包裹在s中,然后将其包装在BufferedInputStream中我认为是解决方案,但是当调用ObjectInputStream时仍然返回false。以下是尝试:

ois.markSupported()

任何帮助都非常感谢!

1 个答案:

答案 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()