バイトレベルではなく、テキストレベルでファイルを(ある種の文字セットでエンコードして)読みたいとしましょう。だから私はReader
クラスが必要です。バッファリングされたリーダとインプットストリームの異なるネスト可能
また、読み込みをバッファしたいとしましょう。これを行うには少なくとも3つの方法があります。
public static void main(String[] args) throws Exception {
BufferedReader r1 = new BufferedReader(new FileReader("foo.txt"));
BufferedReader r2 = new BufferedReader(new InputStreamReader(new FileInputStream("foo.txt")));
InputStreamReader r3 = new InputStreamReader(new BufferedInputStream(new FileInputStream("foo.txt")));
}
R1とR2はほとんど同じ、InputStreamReader
からFileReader
継承しているのであり、実質的にそれの基底クラスでInputStream
を置きます。この場合のバッファリングは、バイトがテキストにデコードされた後に文字レベルで行われます。
しかし、第3の場合は、バッファリングがバイト読み取りとテキストのデコードとの間で行われるため、多少異なります。バッファリングはバイトがテキストにデコードされる前に行われます。
ご質問は、これらのケースの間に大きな違いがありますか? 1つのオプションが他のオプションよりも優れているエッジケースはありますか? FileReader
の