为什么 BufferedReader 的性能比 BufferedInputStream 差这么多?
2022-09-02 04:31:38
我知道使用 BufferedReader(包装 FileReader)将比使用 BufferedInputStream(包装 FileInputStream)慢得多,因为原始字节必须转换为字符。但我不明白为什么它要慢这么多!以下是我正在使用的两个代码示例:
BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(filename));
try {
byte[] byteBuffer = new byte[bufferSize];
int numberOfBytes;
do {
numberOfBytes = inputStream.read(byteBuffer, 0, bufferSize);
} while (numberOfBytes >= 0);
}
finally {
inputStream.close();
}
和:
BufferedReader reader = new BufferedReader(new FileReader(filename), bufferSize);
try {
char[] charBuffer = new char[bufferSize];
int numberOfChars;
do {
numberOfChars = reader.read(charBuffer, 0, bufferSize);
} while (numberOfChars >= 0);
}
finally {
reader.close();
}
我尝试过使用各种缓冲区大小进行测试,所有这些大小都使用150兆字节的文件。以下是结果(缓冲区大小以字节为单位;时间以毫秒为单位):
Buffer Input
Size Stream Reader
4,096 145 497
8,192 125 465
16,384 95 515
32,768 74 506
65,536 64 531
可以看出,BufferedInputStream 的最快时间 (64 ms) 比 BufferedReader 的最快时间 (465 ms) 快 7 倍。正如我上面所说,我没有显着差异的问题;但这种差异似乎不合理。
我的问题是:有没有人对如何提高BufferedReader的性能或替代机制有建议?