缓冲读卡器与扫描仪,FileInputStream与FileReader?

OHH*_*HHH 9 java android

有人可以向我解释为什么我可以将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)

  • 你需要关闭你的流 (3认同)

Sil*_*law 5

德克斯特的答案已经很有用,但是一些额外的解释可能仍然有帮助:

一般而言:InputStream仅提供对源中字节数据的访问。阅读器可以包装在流中并添加适当的文本编码,因此您现在可以阅读字符。BufferedReader可以包装在Reader周围,以缓冲操作,因此它不是一次调用一个字节,而是一次读取一堆,从而减少了系统调用并在大多数情况下提高了性能。

对于文件:

FileInputStream是从文件读取数据的最基本方法。如果您不想自己处理文本编码,可以将其包装到InputStreamReader中,然后将其包装到BufferedReader中。另外,您可以使用FilerReader,它基本上应与FileInputStream + InputStreamReader进行相同的操作。

现在,如果您不想只读取任意文本,而是要读取特定的数据类型(int,long,double,...)或正则表达式,则Scanner非常有用。但是如前所述,它将增加一些构建这些表达式的开销,因此仅在需要时使用它。