【发布时间】:2010-02-27 01:21:44
【问题描述】:
是否有一种简单(因此快速)的方法来完成此操作?基本上只需要一些输入流,可能类似于 socket.getInputStream(),并让流的缓冲区自动重定向到标准输出?
【问题讨论】:
是否有一种简单(因此快速)的方法来完成此操作?基本上只需要一些输入流,可能类似于 socket.getInputStream(),并让流的缓冲区自动重定向到标准输出?
【问题讨论】:
从Java 9开始,你可以使用InputStream.transferTo
例子
try (InputStream stream = Application.class.getResourceAsStream("/test.txt")) {
stream.transferTo(System.out);
}
【讨论】:
没有简单的方法可以做到这一点,因为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()
【讨论】:
IOUtils.copy()
read(byte) 和 write(byte) 时,您可能最终都会进行一次系统调用,这非常昂贵。
您需要一个简单的线程来读取输入流并写入标准输出。确保它屈服于其他线程。
【讨论】: