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

sbe*_*kov 3 java inputstream outputstream stream

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

void dump(OutputStream dest);
Run Code Online (Sandbox Code Playgroud)

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

T.J*_*der 6

两种选择:

记忆

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

管道

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

PipedOutputStream:

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

PipedInputStream:

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

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