将字节添加到InputStream

时间:2015-10-27 08:55:47

标签: java inputstream

我想模拟InputStream的单元测试中的行为(如InputStreams那样)阻塞,直到有更多数据可用。这需要我以块的形式将字节附加到InputStream,以便消费者也可以在块中读取它们。像这样:

@Test
public void readAllInput() throws Exception {
    ???InputStream in = ...; // ???
    Consumer consumer = new Consumer(in);
    Thread consumingThread = new Thread(consumer).start();

    in.add("one".getBytes("UTF-8")); // ???
    in.add("two".getBytes("UTF-8")); // ???
    in.close();
    consumingThread.join();

    assertThat(consumer.getDataAsString()).isEqualTo("onetwo");
}

class Consumer implements Runnable {
    private InputStream in;
    private ByteArrayOutputStream out = new ByteArrayOutputStream();

    public Consumer(InputStream in) {
        this.in = in;
    }

    public void run() {
        IOUtils.copy(in, out);
    }

    public String getDataAsString() {
        return out.toString("UTF-8");
    }
}

什么样的InputStream(或任何其他解决方案)允许我在一端附加数据并从另一端使用它们?

注意:消费者需要基于InputStream的API(不是Reader)。

1 个答案:

答案 0 :(得分:3)

当你正在使用线程时,对于一对PipedInputStream/PipedOutputStream.

这种情况很少见