バッファフローの使用

2422 ワード

昨日の記事では、IOストリームについて全体的に概説しましたが、今日はその中のバッファ(BufferedInputStream(バッファ読み込みストリーム)、BufferedOutputStream(バッファ読み込みストリーム))についてお話しします.

————————————————————————————


コードを書く前に、InputStreamがあるのになぜBufferedInputStreamがあるのかという問題を投げ出します.ufferedInputStreamとBufferedOutputStreamの2つのクラスはそれぞれFilterInputStreamとFilterOutputStreamのサブクラスであり、デザイナサブクラスとして使用すると、データの読み取り/送信のたびに実際の書き込み操作が行われることを防止し、バッファの使用を表す.
バッファを持たない操作は、1バイト読むたびに1バイト書き込まれることを知る必要があります.ディスクに関連するIO操作はメモリの操作よりはるかに遅いため、バッファを持たないストリーム効率は低いです.バッファ付きストリームは、一度に多くのバイトを読むことができますが、ディスクに書き込まず、メモリに先に入れます.バッファサイズが揃うと一度にディスクに書き込む方式で、ディスクの操作回数を減らすことができ、速度が大幅に向上します.
同時にバッファ機能を実現しているだけに、BufferedOutputStreamを使用してデータを書き終えた後、flush()メソッドまたはclose()メソッドを呼び出し、バッファ内のデータを強制的に書き出すことに注意してください.データが書けない場合があります.これと同様にBufferedReaderとBufferedWriterの2つのクラスもあります.

ここでは、本文の冒頭で提起された質問に答えることができます。


BufferedInputStreamとBufferedOutputStreamクラスは、バッファ機能を実現した入力ストリーム/出力ストリームです.バッファ付き入出力ストリームを使用すると、効率が高く、速度が速くなります.

インスタンスの使用

public void test() {
try {
    /**
     *   BufferedInputStream,  10
     * buffer.txt 
     * zxcvbnmlkj
     */
    InputStream in = new BufferedInputStream(new FileInputStream(new File("buff.txt")), 10);
    /* 5 */
    byte [] tmp = new byte[5];
    in.read(tmp, 0, 5);
    System.out.println(" 5 : " + new String(tmp));
    /* */
    in.mark(6);
    /* 5 */
    in.read(tmp, 0, 5);
    System.out.println(" 6 10 : " +  new String(tmp));
    /*reset*/
    in.reset();
    System.out.printf("reset : %c" , in.read());
} catch (Exception e) {
    e.printStackTrace();
}

}
使用方法はFileInputStremとFileOutputStreamとほぼ一致しています.
  public class TestBufferedString {  
  public static void main(String[] args) throws Exception {  
    //    
    BufferedInputStream in = new BufferedInputStream(new FileInputStream("G:\\test.jpg"));  
    File file = new File("D:\\test.jpg");  
    if (file != null) {  
        file.createNewFile();  
    }  
    //    
    BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));  
    byte[] bb = new byte[1024];//    
    int n;//    
    while ((n = in.read(bb)) != -1) {  
        out.write(bb, 0, n);//    
    }  
    out.close();//    
    in.close();  
}    

}
以上は私达の今日言った内容で、もしみんなはまたもっと多くの知识の点を闻きたいならば、下でコメントすることを歓迎して、あるいは私のQQ群に参加して私と検讨してみます(850353792)