我想从远程存储获取一个文件的InputStream,而不将其保存到本地文件系统。远程存储提供了一个Java API,其中有一个方法,它接受一个OutputStream并将文件数据倾倒进去。
void dump(OutputStream dest);
我想到的简单方法是创建一个临时文件,将数据倒入其中,然后重新打开它作为InputStream。但是这种方法会创建一个临时文件。有没有一种不需要代理文件就能实现相同结果的简单方法?
我想从远程存储获取一个文件的InputStream,而不将其保存到本地文件系统。远程存储提供了一个Java API,其中有一个方法,它接受一个OutputStream并将文件数据倾倒进去。
void dump(OutputStream dest);
两个选项:
如果所涉及的“文件”足够小,可以将数据读入ByteArrayOutputStream
,然后使用其toByteArray
方法构造一个ByteArrayInputStream
以进行读取。
为避免在内存中存储过多内容,可以使用PipedOutputStream
和PipedInputStream
。
PipedOutputStream
:
可以将管道输出流连接到管道输入流以创建通信管道。管道输出流是管道的发送端。通常情况下,一个线程向
PipedOutputStream
对象写入数据,另一个线程从连接的PipedInputStream
中读取数据。
PipedInputStream
:
应将管道输入流连接到管道输出流;然后,管道输入流提供写入管道输出流的任何数据字节。通常情况下,一个线程从
PipedInputStream
对象读取数据,另一个线程向相应的PipedOutputStream
中写入数据。
将输出流提供给API,然后从输入流中读取。