我有一個使用 read(buffer, off, len) 的緩沖閱讀器。閱讀器正在將 txt 檔案讀入 2048 個字符的緩沖區。它讀取并列印緩沖區中的內容,直到到達末尾并回傳-1。此時,它不再將最后一個字符重繪 到其緩沖區中。
我嘗試在每次讀取后重置緩沖區無濟于事。
代碼重現。
運行代碼時,它最后一次讀取它不能完全填滿緩沖區。
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
```
public class bufferRead{
public static void main(String[] args) {
try {
FileReader reader = new FileReader("path to file");
BufferedReader br = new BufferedReader(reader);
char[] buffer = new char[2048];
int off = 0;
int totalNumRead = 0;
int numRead;
while ((numRead = br.read(buffer, off, 2048)) != -1) {
totalNumRead = numRead;
System.out.println(numRead " " totalNumRead);
System.out.println(buffer);
}
System.out.println(buffer);
System.out.println(numRead " " totalNumRead);
} catch (IOException e) {
e.printStackTrace();
}
}
}
uj5u.com熱心網友回復:
請注意,br.read(buffer, off, 2048)回傳讀入的字符數。
對于回圈的最后一次迭代,numRead 可能小于buffer.length所以buffer將包含最后一行和倒數第二行的字符:
System.out.println(buffer);
但是如果你改變這個,它只會列印每次迭代讀入的內容,因為它將列印的值設定為讀入的確切字符數:
System.out.println(new String(buffer,0, numRead));
uj5u.com熱心網友回復:
你為什么要緩沖一個已經緩沖的類?
String folder = "/path/to/folder";
String file = "filename";
try (BufferedReader reader = Files.newBufferedReader(FileSystems.getDefault().getPath(folder, file), StandardCharsets.UTF_8)) {
reader.lines().forEach(System.out::println);
} catch (Exception e) {
e.printStackTrace();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/476871.html
上一篇:GridFS大檔案下載使Node.js服務器崩潰。MongoServerError:排序超出了位元組的記憶體限制
