将字节添加到 InputStream
Add bytes to 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
)。
当您使用线程时,一对 PipedInputStream/PipedOutputStream.
的情况很少见
我想在 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
)。
当您使用线程时,一对 PipedInputStream/PipedOutputStream.