我想从远程存储中获取一个文件作为InputStream而不将其保存到本地文件系统中。远程存储为Java API提供了一种方法,该方法采用OutputStream并将文件数据转储到其中。
void dump(OutputStream dest);
我想出的简单方法是创建一个临时文件,将数据转储到其中,然后将其作为InputStream重新打开。但是这种方法会创建一个临时文件。没有代理文件,有没有简单的方法可以达到相同的结果?
最佳答案
两种选择:
记忆
如果所讨论的“文件”足够小而无法使用,则可以将数据读取到 ByteArrayOutputStream
中,然后使用其 toByteArray
方法构造要读取的 ByteArrayInputStream
。
管道
为了避免在内存中存储多余的内容,可以使用 PipedOutputStream
和 PipedInputStream
。PipedOutputStream
:
管道输出流可以连接到管道输入流以创建通信管道。管道输出流是管道的发送端。通常,一个线程将数据写入PipedOutputStream
对象,而另一线程从连接的PipedInputStream
中读取数据。PipedInputStream
:
管道输入流应连接到管道输出流。然后,管道输入流将提供写入管道输出流的任何数据字节。通常,一个线程从PipedInputStream对象读取数据,而另一线程将数据写入相应的PipedOutputStream。
您为API提供输出流,并从输入流中读取。