使用标准Java库获取Writer的InputStream

3

我有一个方法可以将数据写入OutputStream,但需要将OutputStream的内容作为InputStream返回。

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

我找到了一些库,例如IOUtils和其他基于线程的方法来执行此操作。是否有一种使用标准Java库实现此操作的简单方法? 我想将writer中的内容作为InputStream返回,以便调用方法消耗它。

谢谢!

2个回答

6

先写入到一个ByteArrayOutputStream中,然后获取字节数组,最后从这个字节数组返回一个ByteArrayInputStream


1
如果数据是文本的话,他也可以使用StringWriter/StringReader,这可能会稍微更好一些。 - user949300
1
这样做会不会将整个字节数组加载到内存中? - Alexandre Cassagne

2

我认为正确的方法是使用PipedInputStream。它就像Unix中的管道(在高级别上)。PipedInputStream的构造函数需要PipedOutputStream,因此如果你向PipedOutputStream写入数据,你将得到你想要的结果!

祝好运!


4
根据Javadoc文档:通常情况下,通过一个线程从PipedInputStream对象中读取数据,并由另一个线程将数据写入相应的PipedOutputStream。不建议在单个线程中同时使用这两个对象,因为这可能会导致线程死锁。 - JB Nizet
是的。这就是我想避免使用PipedInputStream的原因之一。 - Skynet

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