第三十八IOフローストリームのバッファ[ジャワ]セクション

バッファフロー

データ読み出し速度向上させるために、バッファフローバッファリング機能を備えたJava APIは、これらのストリーム・クラスを使用する場合、内部バッファ配列がデフォルト8192バイト(8Kバイト)バッファによって使用されて作成します。
バッファリングプロセスフローストリームは、操作フローのノードが属する、バッファフローがありますBufferedReaderのとBufferedWriterの、BufferedInputStreamをとなBufferedOutputStreamを

  • この方法は、一般にノードと同様の流れで緩衝ストリームを用います。
  • 直接ファイルに書き込めませんストリームにバイトを書き込むとき、最初のバッファがいっぱいになるまで、なBufferedOutputStreamがファイルに書き込まれる使い捨てのバッファにデータを置くバッファに書き込まれます。
  • 使用フラッシュ(それは自動的に内部メソッドを呼び出すため)、出力ストリームにバッファのすべての内容を強制することができ、一般的に使用されていません。
  • 開口と逆の順序で流れのシーケンスを閉じます。
  • 近い限り流れるように最外層として、フローオフ最外層近いは、対応する内側ノードがストリーミングであろう。
  • デフォルトを閉じる前に(フラッシュ一度呼ばれます)、残りのすべてのデータの出力ストリームにバッファリングします。

例:BufferedReaderの和BufferedWriterの

統計のブログには掲載の各文字が表示さで結果のテキストファイルの「Hello-copy.txt」の例の数を、結果の「Hello-counts.txt」ファイルを書き込み

package cn.jingpengchong.io;

import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Test {
    public static void main(String[] args) {
        Map<Character,Integer> map = new HashMap<>();
        //1、创建File类对象
        File srcfile = new File("Hello.txt");
        File desfile = new File("Hello-counts.txt");
        //2、创建BufferedReader/BufferedWriter类对象
        BufferedReader reader = null;
        BufferedWriter writer = null;
        try {
            reader = new BufferedReader(new FileReader(srcfile));
            writer = new BufferedWriter(new FileWriter(desfile));
            char[] data = new char[10];
            //3、读入与写出操作
            int read = reader.read(data);
            while (read != -1){
                for (int i = 0; i < read; i++) {
                    if(map.get(data[i]) == null){
                        map.put(data[i],1);
                    }else{
                        map.put(data[i],map.get(data[i])+1);
                    }
                }
                read = reader.read(data);
            }
            Set<Map.Entry<Character, Integer>> entries = map.entrySet();
            for(Map.Entry<Character, Integer> entry : entries){
                switch (entry.getKey()){
                    case ' ':
                        writer.write("空格\t=\t" + entry.getValue());
                        break;
                    case '\t':
                        writer.write("tab键\t=\t" + entry.getValue());
                        break;
                    case '\r':
                        writer.write("回车\t=\t" + entry.getValue());
                        break;
                    case '\n':
                        writer.write("换行\t=\t" + entry.getValue());
                        break;
                    default:
                        writer.write(entry.getKey() + "\t=\t" + entry.getValue());
                        break;
                }
                writer.newLine();
            }
            System.out.println("统计完成!!!");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(reader != null){
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(writer != null){
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

結果は以下の通りである:
ここに画像を挿入説明
「こんにちは-counts.txt」ファイルを次のように:
ここに画像を挿入説明

例:BufferedInputStreamを和なBufferedOutputStream

実装バッファストリーミングブログポストにコピービデオファイルの動作、および比較時間の長さは、2つの操作を消費します

package cn.jingpengchong.io;

import java.io.*;

public class Test {
    public static void main(String[] args) {
        //1、创建File类对象
        File srcfile = new File("C:\\Users\\lenovo\\Desktop\\01-视频.avi");
        File desfile = new File("C:\\Users\\lenovo\\Desktop\\02-视频.avi");
        //2、创建BufferedInputStream/BufferedOutputStream类对象
        BufferedInputStream reader = null;
        BufferedOutputStream writer = null;
        try {
            reader = new BufferedInputStream(new FileInputStream(srcfile));
            writer = new BufferedOutputStream(new FileOutputStream(desfile));
            byte[] data = new byte[1024];
            //3、读入与写出操作
            long start = System.currentTimeMillis();
            int read = reader.read(data);
            while (read != -1) {
                writer.write(data, 0, read);
                read = reader.read(data);
            }
            long end = System.currentTimeMillis();
            System.out.println("复制成功!!!用时(毫秒):" + (end - start));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //4、关闭资源
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (writer != null) {
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

結果は以下のようにしている:
ここに画像を挿入説明
5730ミリ秒でストリーム、およびバッファが6倍以上速く、唯一の955ミリ秒を流したときに、ノードと同じように、他の条件で見ることができます!

公開された128元の記事 ウォン称賛17 ビュー2742

おすすめ

転載: blog.csdn.net/qq_43705275/article/details/103990372