Java:写入OutputStream,然后将其用作InputStream

时间:2015-09-16 10:30:13

标签: java stream inputstream outputstream

我希望从远程存储中获取一个文件作为InputStream,而不将其保存到本地文件系统。远程存储为Java API提供了一种方法,该方法接受OutputStream并将文件数据转储到其中。

void dump(OutputStream dest);

我提出的简单方法是创建一个临时文件,将数据转储到其中并重新打开它作为InputStream。但是这种方法会创建一个临时文件。有没有代理文件可以轻松实现相同的结果?

1 个答案:

答案 0 :(得分:5)

两个选项:

内存

如果"文件"有问题的是足够小以使其可行,您可以将数据读入ByteArrayOutputStream,然后使用其toByteArray方法构建一个ByteArrayInputStream来读取。

管道

为避免在内存中存储超过必要的内容,您可以使用PipedOutputStreamPipedInputStream

PipedOutputStream

  

管道输出流可以连接到管道输入流以创建通信管道。管道输出流是管道的发送端。通常,数据由一个线程写入PipedOutputStream对象,并且由其他线程从连接的PipedInputStream读取数据。

PipedInputStream

  

管道输入流应连接到管道输出流;然后,管道输入流提供写入管道输出流的任何数据字节。通常,一个线程从PipedInputStream对象读取数据,而其他线程将数据写入相应的PipedOutputStream。

您为API提供输出流,并从输入流中读取。