向InputStream添加字节

3

我想在单元测试中模拟InputStream的行为,它会(像InputStream一样)阻塞直到有更多的数据可用。这需要我分块向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个回答

3

由于您正在使用线程,因此这是一种罕见的情况,需要使用一对PipedInputStream/PipedOutputStream。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接