BufferedReader.readLine()实现分批读
时间: 2023-12-12 13:11:52 浏览: 76
使用readline的一个实例
`BufferedReader.readLine()` 方法并不适合分批读取,因为它是按行读取数据,如果一次读取的字符数不足一行,就会阻塞等待下一行数据的到来。如果要实现分批读取,推荐使用 `BufferedReader` 的 `read(char[] cbuf, int off, int len)` 方法,读取指定长度的字符数据。
另外,如果要按行读取数据,也可以使用 `RandomAccessFile` 类来实现分批读取。以下是一个示例代码,每次读取 1024 个字节,处理完后再读取下一批,然后按行分割数据:
```java
try (RandomAccessFile raf = new RandomAccessFile("file.txt", "r")) {
byte[] buffer = new byte[1024];
int len;
StringBuilder sb = new StringBuilder();
while ((len = raf.read(buffer, 0, buffer.length)) != -1) {
sb.append(new String(buffer, 0, len));
String[] lines = sb.toString().split("\\r?\\n");
for (int i = 0; i < lines.length - 1; i++) {
// 处理读取到的一行数据
// ...
}
sb.setLength(0);
sb.append(lines[lines.length - 1]);
}
if (sb.length() > 0) {
// 处理读取到的最后一行数据
// ...
}
} catch (IOException e) {
e.printStackTrace();
}
```
在读取过程中,`raf.read(buffer, 0, buffer.length)` 方法会返回读取的字节数,如果返回 -1,表示已经读取完整个文件。注意,读取到的字节数可能小于指定的长度,所以需要在处理数据时,只处理实际读取到的字节数。读取到的数据需要转换成字符串,然后按行分割处理。最后要注意处理读取到的最后一行数据,因为最后一行可能没有换行符。
阅读全文