1

如何在 Java 中一次读取一定数量的元素(特别是字符)?这有点难以解释,但我的想法是这样的:

如果我有一个包含以下内容的文本文件:

这是一个名为 text.txt 的文本文件

我希望能够有一个字符串或一定长度的字符数组来遍历文件。所以如果我指定长度为3,第一次迭代char数组将包含[T,h,i],如果我迭代一次,它将变为[h,i,s],然后是[i,s , ], 等等。

我尝试使用 BufferedReader.read(char[], off, len) 方法一次从文件中读取一定数量的字符,但性能对于我想要做的事情很重要。

有没有什么方法可以在 Java 中实现这一点?我尝试过使用 BufferedReader,但我对它不太熟悉,无法充分利用它。

4

1 回答 1

1

通过缓冲输入流和读取器,您实际上可以获得最佳 I/O 性能。(仅缓冲一个可以带来大部分改进;双缓冲只是稍微好一点,但更好。)这是一次读取一个文件块的示例代码:

final int CHUNK_SIZE = 3;
final int BUFFER_SIZE = 8192; // explicit buffer size is better
File file = ...
InputStream is = new BufferedInputStream(new FileInputStream(file), BUFFER_SIZE);
Reader rdr = new BufferedReader(new InputStreamReader(is), BUFFER_SIZE);
char buff = new char[CHUNK_SIZE];
int len;
while ((len = rdr.read(buff)) != -1) {
   // buff[0] through buff[len-1] are valid
}
rdr.close();

当然,这缺少各种错误检查、异常处理等,但它显示了缓冲流和读取器的基本思想。您可能还想在构造InputStreamReader. (您可以通过使用 aFileReader来绕过输入流的处理,但是您不能指定字符集编码并失去双缓冲带来的轻微性能提升。)

于 2012-04-27T02:19:44.617 回答