Я хотел бы моделировать поведение в единичном тесте InputStream, которое (как и InputStreams do) блокируется до тех пор, пока не появятся дополнительные данные. Это требует от меня добавления байтов в 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
).