Java 输入流比输出流更快

标签 java stream

我对 Java I/O 流有点困惑。我的情况是,我的输入流非常快(例如从磁盘读取文件),但我的输出流非常慢(例如写入 http servlet 响应输出流)。

如果我的文件大小非常大,最终我的输出流(通过管道传输到文件的输入流)会抛出任何与内存相关的异常并关闭流,会发生什么?或者我的输出流写入方法将被阻止,直到输出流数据被清除?

输出流是否有可能已满?

public void pipe(InputStream is, OutputStream os) throws IOException {
  int n;
  byte[] buffer = new byte[1024];
  while((n = is.read(buffer)) > -1) {
    os.write(buffer, 0, n);   // would this get blocked if outputstream is full?
  }
 os.close ();
}

最佳答案

是的,OutpuStream 将阻塞,直到对底层系统(文件系统、网络套接字等)的写入完成。如果OutpuStream实际上是BufferedOutputStream,那么会有一些缓冲,但如果缓冲区已满,最终它仍然会阻塞。

关于Java 输入流比输出流更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41833284/

相关文章:

java - Java 是否有像 Hoptoad 和 Exceptional for Ruby 这样的错误通知系统?

java - 从 Java 创建 HTML 表格,检查 TD 是否已经在它的右边有一个 TD

java - 如何创建空 map 并设置默认值

java - Boolean.hashCode()

c++ - 使用 ostream 无处打印

java - Hashmap loadfactor - 基于占用的桶数或所有桶中的条目数?

http - 从 WebResponse 响应流读取响应

javascript - 获取在 zlib 流中读取的字节数

node.js - NodeJS - 如何在不缓冲的情况下流式传输请求正文

java - 为什么在 Java 中应该避免 IO as Byte