如何将InputStream输入流导入标准输出?Java

4

有没有一种简单(因此快速)的方法来完成这个任务?基本上只需要获取一些输入流,可以是类似于socket.getInputStream()的内容,并使流的缓冲区自动重定向到标准输出。

3个回答

17

没有简单的方法可以实现此功能,因为InputStream具有拉取式接口,而OutputStream具有推送式接口。您需要某种泵送循环来从InputStream中拉取数据并将其推入OutputStream中。类似这样的代码(如果必要,可以在单独的线程中运行):

int size = 0;
byte[] buffer = new byte[1024];
while ((size = in.read(buffer)) != -1) out.write(buffer, 0, size);

Apache Commons IO已经实现了IOUtils.copy()


Apache Common的IO工具会有帮助吗? - Zombies
1
@Zombies:是的,你可以使用IOUtils.copy()函数。 - axtavt
1
@axtavt - 一般来说,在未缓冲的流上进行逐字节操作是一个不好的主意。你可能会为每次调用read(byte)write(byte)做一次系统调用,这非常昂贵。 - Stephen C
1
复制(inputStream,System.out)? - Zombies
1
@Zombies:是的。如果你不想阻塞当前线程,你应该在一个单独的线程中运行它。 - axtavt

4
自Java 9开始,您可以使用InputStream.transferTo功能。
示例:
try (InputStream stream = Application.class.getResourceAsStream("/test.txt")) {
    stream.transferTo(System.out);
}

2

您需要一个简单的线程,它从输入流中读取并写入标准输出。确保它能让其他线程运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接