文
章
目
录
章
目
录
在这个Java教程中,我们将学习如何将一个OutputStream转换为InputStream,这在从返回OutputStream的源读取数据时可能是必需的;同时将数据写入/传递给需要以InputStream形式接收数据的另一个目标。
1.使用ByteArrayInputStream
ByteArrayInputStream包含一个内部缓冲区,可以存储从流中读取的字节。我们可以从输入流中读取字节并将其存储在其内部缓冲区中。稍后,应用程序可以使用存储在ByteArrayInputStream中的字节作为输入流。
在此示例中,我们将利用字节数组来存储和传输中间数据。流程如下:
OutputStream -> byte[] -> InputStream
在这个例子中,我们创建了一个来自文件的输出流以进行演示。
//OutputStream
ByteArrayOutputStream outStream = new ByteArrayOutputStream(new File("path/file"));
//byte[] -> InputStream
ByteArrayInputStream inStream = new ByteArrayInputStream( outStream.toByteArray() )
然后我们将文件中的字节传递给输入流。这是在Java中将OutputStream转换为InputStream的最简单方法。
2.使用NIO通道将OutputStream复制到InputStream
如果OutputStream中的数据有限且较小,上述方法非常有用。如果您有一些大量数据,那么您希望以流的形式实时进行转换,而不是在任何时候都将整个数据存储在缓冲区中。
换句话说,您需要创建一个管道方法,使数据从一端流向另一端,而不需要将整个数据存储在缓冲区中。
try(FileOutputStream fos = new FileOutputStream(new File("path/out/file"));
FileInputStream fis = new FileInputStream(new File("path/in/file"));) {
FileChannel outputChannel = fos.getChannel();
FileChannel inputChannel = fis.getChannel();
outputChannel.transferTo(0, inputChannel.size(), inputChannel);
}
如果您有更有效和实用的方法来将OutputStream转换为InputStream,请与我们分享。