2015-10-27 2 views
2

Я хотел бы моделировать поведение в единичном тесте 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).

ответ

3

Как вы используете нитки, это редкий случай для пары PipedInputStream/PipedOutputStream.

Смежные вопросы