Получение InputStream of Writer с использованием стандартной библиотеки Java

У меня есть метод, который записывает данные в OutputStream, но должен возвращать содержимое OutputStream как InputStream

public InputStream getInputStreamOfData(type param) {
    // ..... data 
    OutputStreamWriter writer = new OutputStreamWriter();
    writer.write(data);
    // convert writer object to an InputStream 
}

Я столкнулся с некоторыми библиотеками для этого, такими как IOUtils и другими методами на основе потоков. Есть ли простой способ добиться этого с помощью стандартной библиотеки Java? Я хочу вернуть содержимое в писатель как InputStream для использования вызывающим методом.

Спасибо!


person Skynet    schedule 03.02.2012    source источник


Ответы (2)


Запишите в ByteArrayOutputStream, затем получите массив байтов и верните ByteArrayInputStream из этого массива байтов.

person JB Nizet    schedule 03.02.2012
comment
Если данные текстовые, он также может использовать StringWriter / StringReader, что было бы немного предпочтительнее. - person user949300; 03.02.2012

Я думаю, что правильный способ сделать это - использовать PipedInputStream. Это похоже на трубы unix (на высоком уровне). Конструктор PipedInputStream принимает PipedOutputStream, поэтому, если вы напишете в PipedOutputStream, вы получите именно то, что хотите!

Удачи!

person siemanko    schedule 03.02.2012
comment
Из javadoc: Обычно данные считываются из объекта PipedInputStream одним потоком, а данные записываются в соответствующий PipedOutputStream каким-либо другим потоком. Не рекомендуется использовать оба объекта из одного потока, так как это может привести к тупиковой ситуации в потоке - person JB Nizet; 03.02.2012
comment
да. Это одна из причин, по которой я хотел избежать использования PipedInputStream. - person Skynet; 04.02.2012