Java IOバッファーストリームの概要3

ここに画像の説明を挿入

バッファストリーム

バッファリングされたストリームは、4つの基本的なFileXXXストリームの拡張である高度なストリームとも呼ばれます。したがって、これらも4つのストリームであり、データタイプによって
効率的に読み書きできるバッファストリーム、エンコーディングを変換できる変換ストリーム、永続ストレージオブジェクトです。シリアル化されたストリーム

  • バイトバッファストリーム:BufferedInputStream、BufferedOutputStream
  • 文字バッファストリーム:BufferedReader、BufferedWriter

バイトバッファリングされた入力ストリーム[BufferedInputStream]

ここに画像の説明を挿入
コードオン!

public class Demo01BufferedInputStreram {

    public static void main(String[] args) throws IOException {

        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("F:\\cccc.txt"));
        byte[] bytes = new byte[1024];
        int len = 0;
        while ((len = bis.read(bytes)) != -1) {
            System.out.println(new String(bytes, 0, len));
        }
        bis.close();
    }

}

その結果!FileInputStreamが提供する機能は、ファイルの内容を効率的に読み取ることと同じです
ここに画像の説明を挿入

バイトバッファー出力ストリーム[BufferedOutputStream]

ここに画像の説明を挿入
コードオン!

public class Demo02BufferedOutputStream {

    public static void main(String[] args) throws IOException {

        BufferedOutputStream bos = new BufferedOutputStream(
                new FileOutputStream("F:\\dddd.txt", true));
        String content = "!!!!Hello World!!!" + "\r\n";
        for (int i = 0; i < 10; i++) {
            bos.write(content.getBytes());
        }
        System.out.println("文件输出成功");
        bos.close();


    }
}

**!その結果!** FileIOnputStreamが提供する機能は、ファイルコンテンツを効率的に読み取ることと同じです
ここに画像の説明を挿入

デモCopyFile

コードを入力してファイルをコピーしてください!それがどのファイルであるかは気にしないでください。

public class Demo03CopyFIle {

    public static void main(String[] args) throws IOException {

        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\Media\\MO8EPSG_1.rmvb"));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("F:\\MO8EPSG_1.rmvb"));

        long start = System.currentTimeMillis();
        byte[] bytes = new byte[10245];
        int len = 0;
        while ((len = bis.read(bytes)) != -1) {
            bos.write(bytes, 0, len);
        }

        bis.close();
        bos.close();

        long end = System.currentTimeMillis();
        System.out.println("本次复制文件用了:" + (end - start) + "毫秒");
    }

}

**!その結果!** 1 Gファイルをコピーするのに1秒しかかかりませんでした
ここに画像の説明を挿入

文字バッファリングされた入力ストリーム[BufferedReader]

文字、配列、および行を効率的に読み取るために、文字入力ストリームおよびバッファ文字からテキストを読み取ります。
バッファサイズを指定することも、デフォルトのサイズを使用することもできます。デフォルト値は、ほとんどの用途に十分な大きさです。

ここに画像の説明を挿入

コードオン!

public class BufferedReaderAndBufferedWriter {![在这里插入图片描述](https://img-blog.csdnimg.cn/20200217205959345.png)

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new FileReader("F:\\cccc.txt"));
        char[] chars = new char[1024];
        int len = 0;
        while ((len = br.read(chars)) != -1) {
            System.out.println(new String(chars, 0, len));
        }

    }

}

その結果!
ここに画像の説明を挿入

注:
指定したファイルの入力はバッファーに入れられます。バッファリングは行われず、read()またはreadLine()を呼び出すたびに、バイトがファイルから読み取られ、文字に変換されて返される場合があります。これは非常に非効率的
です。テキスト入力にDataInputStreamsを使用するプログラムは、適切なBufferedReaderを使用して置き換えることができます各DataInputStreamをローカライズする

文字バッファー出力ストリーム[BufferedWriter]

文字をバッファリングして文字出力ストリームにテキストを書き込み、単一の文字、配列、および文字列を効率的に書き込みます。
バッファー・サイズを指定するか、デフォルトのサイズを受け入れることができます。デフォルト値は、ほとんどの用途に十分な大きさです。

ここに画像の説明を挿入

コードオン!

public class Demo02BufferedWriter {

    public static void main(String[] args) throws IOException {

        BufferedWriter bw = new BufferedWriter(new FileWriter("F:\\ffff.txt", true));
        String content = "Hello World" + "\r\n";
        for (int i = 0; i < 10; i++) {
            bw.write(content);
        }
        bw.close();
    }
}

その結果!
ここに画像の説明を挿入

注:
PrintWriterの出力はファイルにバッファーされます。バッファリングなし。print()メソッドを呼び出すたびに文字がバイトに変換され、すぐにファイルに書き込まれます。これは非常に非効率的です。

元の記事24件を公開 賞賛された33件 訪問2391件

おすすめ

転載: blog.csdn.net/weixin_41241629/article/details/104353246