有人可以向我解释为什么我可以将FileInputStream或FileReader用于BufferedReader?有什么不同?与此同时,扫描仪优于BufferedReader的优势是什么.我正在阅读它有助于标记化,但这意味着什么?
Dex*_*ter 13
try {
//Simple reading of bytes
FileInputStream fileInputStream = new FileInputStream("path to file");
byte[] arr = new byte[1024];
int actualBytesRead = fileInputStream.read(arr, 0, arr.length);
//Can read characters and lines now
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));
String lineRead = bufferedReader.readLine();
char [] charArrr = new char[1024];
int actulCharsRead = bufferedReader.read(charArrr, 0, charArrr.length);
//File reader allows reading of characters from a file
FileReader fileReader = new FileReader("path to file");
actulCharsRead = fileReader.read(charArrr, 0, charArrr.length);
//It is a good idea to wrap a bufferedReader around a fileReader
BufferedReader betterFileReader = new BufferedReader(new FileReader(""));
lineRead = betterFileReader.readLine();
actulCharsRead = betterFileReader.read(charArrr, 0, charArrr.length);
//allows reading int, long, short, byte, line etc. Scanner tends to be very slow
Scanner scanner = new Scanner("path to file");
//can also give inputStream as source
scanner = new Scanner(System.in);
long valueRead = scanner.nextLong();
//might wanna check out javadoc for more info
} catch (IOException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
德克斯特的答案已经很有用,但是一些额外的解释可能仍然有帮助:
一般而言:InputStream仅提供对源中字节数据的访问。阅读器可以包装在流中并添加适当的文本编码,因此您现在可以阅读字符。BufferedReader可以包装在Reader周围,以缓冲操作,因此它不是一次调用一个字节,而是一次读取一堆,从而减少了系统调用并在大多数情况下提高了性能。
对于文件:
FileInputStream是从文件读取数据的最基本方法。如果您不想自己处理文本编码,可以将其包装到InputStreamReader中,然后将其包装到BufferedReader中。另外,您可以使用FilerReader,它基本上应与FileInputStream + InputStreamReader进行相同的操作。
现在,如果您不想只读取任意文本,而是要读取特定的数据类型(int,long,double,...)或正则表达式,则Scanner非常有用。但是如前所述,它将增加一些构建这些表达式的开销,因此仅在需要时使用它。
| 归档时间: |
|
| 查看次数: |
9021 次 |
| 最近记录: |