「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();
}
}

Development

Posted by arkgame