「Java言語」java.io.BufferedOutputStreamデータをバッファ出力サンプルソース
機能:バッファ出力
操作方法:バイト配列の操作
Javaコード:
package java.io;
public class BufferedOutputStream extends FilterOutputStream {
/**
* データ保存用内部バッファ
*/
protected byte buf[];
/**
buf中バイトの有効数。
count範囲:[0,buf.length]
有効データ:buf[0]~ buf[count-1]
*/
protected int count;
/**
*コンストラクタ、デフォルト8MB
*/
public BufferedOutputStream(OutputStream out) {
this(out, 8192);
}
public BufferedOutputStream(OutputStream out, int size) {
super(out);
if (size <= 0) {
throw new IllegalArgumentException(“Buffer size <= 0"); } buf = new byte[size]; } /** 内部バッファデータを処理 */ private void flushBuffer() throws IOException { if (count > 0) {
out.write(buf, 0, count);
count = 0;
}
}
/**
*バイトを書き込み
*/
public synchronized void write(int b) throws IOException {
if (count >= buf.length) { //バッファ多い場合
flushBuffer();
}
buf[count++] = (byte)b; //バッファ少ない場合
}
/**
* 一括データを書き込み
*/
public synchronized void write(byte b[], int off, int len) throws IOException {
if (len >= buf.length) {
flushBuffer();
out.write(b, off, len);
return;
}
if (len > buf.length – count) {
flushBuffer();
}
System.arraycopy(b, off, buf, count, len); /
count += len; //カウント値がlenを追加
}
/**
* 直ぐにバッファをフラッシュ
*/
public synchronized void flush() throws IOException {
flushBuffer();
out.flush();
}
}