【发布时间】:2018-11-06 03:11:26
【问题描述】:
我了解写入文件时的缓冲区是什么 - 操作系统文件写入(调用本机 API - 一个方法调用一个字符)的成本很高,因此在缓冲区中收集了许多字符/字节并写入缓冲区使用一个 OS API 调用归档。
但是这里的缓冲区是什么意思?为什么?
ByteArrayOutputStream(int size) - 创建一个新的字节数组输出 流,具有指定大小的缓冲区容量,以字节为单位。
ByteArrayOutputStream() 默认有 32 个字节的缓冲区,这就是为什么 Apache Commons 具有完全相同的类 org.apache.commons.io.output.ByteArrayOutputStream 仅缓冲区大小和机制不同:“原始实现仅在开始。由于这个类是为重型设计的,它从 1024 字节开始。与原来的相比,它不会重新分配整个内存块,而是分配额外的缓冲区。这样就不需要对缓冲区进行垃圾收集,内容也不需要'不必将其复制到新缓冲区。此类的行为与原始类完全一样。"
除了在ByteArrayInputStream(byte[] buf) 中,据我了解,“buf”(缓冲区)实际上是要输入 InputStream 的数据源(字节)(ByteArrayInputStream 模拟字节数组中的 InputStream),所以我认为这里的缓冲区一词令人困惑。
【问题讨论】:
-
缓冲区只是用于(通常是临时的)数据收集的内存区域。如果您更清楚,您可以将文本中的
buffer替换为internal array。 -
这是一个字节数组。我看不出输入流与输出流有什么混淆。