I/O
Apache Commons IO
実際のプログラミングでは、Apache Commons IO を利用、あるいは参考にするとよいでしょう。
java.io の基本が詰まっているので、ぜひソースを読んでおく事を推奨します。
InputStream / OutputStream
により byte
単位での入出力を行うことができます。
public static void copy(
InputStream input, OutputStream output) throws IOException {
byte[] buffer = new byte[4096];
int n = 0;
while (-1 != (n = input.read(buffer))) {
output.write(buffer, 0, n);
}
}
は内部バッファを持ちます。都度、ストリームを介すのではなく、内部バッファにデータを溜め込んでおくことで、効率的にストリームにアクセスします。
BufferedOutputStream#write
ではバッファに溜め込むだけで、実際に出力が行われるわけではありません。以下の条件で出力が行われます。
- バッファがいっぱいになった時
BufferedOutputStream#flush
メソッドにより、任意のタイミングでバッファを出力BufferedOutputStream#close
メソッドにより、ストリームを閉じる際にバッファを出力
Reader / Writer
により char
単位での入出力を行うことができます。
public static void copy(
Reader input, Writer output) throws IOException {
char[] buffer = new char[4096];
int n = 0;
while (-1 != (n = input.read(buffer))) {
output.write(buffer, 0, n);
}
}
は、バイトストリーム同様、char
型の内部バッファを持ち、効率的にストリームにアクセスします。