BufferedReader/BufferedWriterクラス
バッファリング処理 – BufferedReader/BufferedWriterクラス- BufferedReader(Reader in [,int sz])
- BufferedWriter(Writer out [,int sz])
- in:入力ストリーム
- out:出力ストリーム
- out:出力ストリーム
バッファリング処理とは、書き込み時であればデータを一旦メモリー(バッファ)に蓄積し、いっぱいになったところでファイルに出力することを言います。読み込み時であればバッファにまとめてデータを読み込み、いっぱいになったところでデータを処理します。いずれの場合もデータをまとめて処理できるので、読み書きを効率化できます。
このようなバッファリングを担うのが、BufferedReader/BufferedWriterクラスの役割です。BufferedReader/BufferedWriterクラスを利用するには、コンストラクターに対してもととなるReader/Writerオブジェクトを渡すだけです。
BufferedReader/BufferedWriterクラスで利用できるメソッドには、以下のようなものがあります。
| Period/Durationクラスの主なメソッド | ||
|---|---|---|
| クラス | メソッド | 概要 |
| BufferedReader | int read([char[] c [,int off, int len]]) | 入力ストリームから文字配列cに読み込み (offは開始位置、lenは読み込み長) |
| String readLine() | 行を読み込み | |
| long skip(long n) | 文字の読み込みをスキップ | |
| void close() | ストリームを閉じる | |
| BufferedWriter | void write(char[] cbuf [,int off, int len]) | 文字配列cの内容を出力ストリームに書き出し (offは開始位置、lenは読み込み長) |
| void write(String s [,int off, int len]) | 文字列sの内容を出力ストリームに書き出し (offは開始位置、lenは読み込み長) |
|
| void newLine() | 改行文字を書き込み | |
| void close() | ストリームを閉じる | |
| void flush() | 出力をフラッシュ | |
以下は、テキストファイルsample.txtの内容をsample2.txtに転記する例です。
StreamBuffer.java
package com.example.mynavi.stream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class StreamBuffer {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(
new FileInputStream("C:/data/sample.txt"), "UTF-8"));
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream("C:/data/sample2.txt"), "UTF-8"))) {
String line;
while ((line = reader.readLine()) != null) {
writer.write(line);
writer.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
BufferedReaderクラスでは、readLineメソッドを利用することで、テキストを(1文字単位)ではなく、1行単位で読み込めます。
また、readLineメソッドは次の行がない場合にnullを返します。そこでサンプルでも、readLineメソッドの戻り値がfalseになったタイミングで、whileループを終了しています。






