Java 7 - 通过类层次结构流数据

时间:2015-05-29 08:23:03

标签: java performance io stream

我正在尝试编写某种类层次结构,更具体地说,是执行层次结构。数据应该通过每个元素向下传递,同时在过程中进行修改。并发不是问题,尽管它是多线程程序的一部分。 澄清:希望拥有类的层次结构,我想要一个实例层次结构。像这样:

public abstract class ExecutionElement extends OutputStream {
    private ExecutionElement child;
    private InputStream input;

    public ExecutionElement(InputStream input) {
        this.input = input;
    }

    public ExecutionElement(ExecutionElement parent) {
        parent.addChild(this);
    }

    private void addChild(ExecutionElement child) {
        this.child = child;
    }

    protected PipedOutputStream processData() {
        // process the data according to the purpose of the current element. 
        // pseudocode from here
        // this is the root element, read from the InputStream and write to child element 
    }

    protected PipedOutputStream processData(PipedOutputStream data) {
        // this is an intermediary element, read from PipedOutputStream -->
        // convert the stream to pipedInputStream
        // process data
        // write to child
    }
}

想法如下:我将某种InputStream传递给层次结构的根元素。然后,根元素(插入或删除流的特定部分)修改此数据,然后传递给子元素。冲洗并重复。

整个过程必须尽可能高效。当然,ExecutionElement会有几种不同的实现方式。最近我一直在考虑使用PipedInputStreamPipedOutputStream来加快速度,但它对我来说还不行。此外,出于几个原因,我无法使用外部库。我们正在为项目使用Java 7,因此我们不能按照建议使用Streams,因为这是Java 8的一项功能。

问题是:您对层次结构的设计有任何建议/建议吗?我应遵循的任何具体设计原则?

提前致谢。

1 个答案:

答案 0 :(得分:2)

您基本上想要实现Pipeline Pattern

如果您传递了字节数据,那么您已经准备好了InputStream/OutputStream类的实施方案(您可以延伸FilterInputStreamFilterOutputStream )。如果您打算传递对象,我建议您创建自己的"对象流"课程(不要使用ObjectInputStream/ObjectOutputStream,他们要进行序列化。)