Java で大きなテキスト ファイルを書き込む場合、BufferedWriter よりも Direct FileWriter を使用した方が高速ですか?

DDD
リリース: 2024-11-12 19:41:02
オリジナル
532 人が閲覧しました

Is Using Direct FileWriter Faster Than BufferedWriter for Writing Large Text Files in Java?

テキスト ファイルの大規模データの書き込み速度の向上

大量のデータセットを扱う場合、テキスト ファイルの書き込みパフォーマンスを最適化することが重要です。 BufferedWriter の使用は一般的な手法ですが、常に望ましい効率が得られるとは限りません。この記事では、Java でのデータ書き込みを高速化するための別のアプローチについて説明します。

FileWriter の直接使用法

BufferedWriter は、データの書き込みにバッファーを使用したアプローチを提供します。ただし、このバッファをバイパスすると、書き込みが通常ドライブのメモリにキャッシュされる最新のシステムでは速度が向上する可能性があります。これを実現するには、コード内で BufferedWriter を FileWriter に置き換えるだけです。

実証的テスト

実証的テストでは、直接 FileWriter を使用することで大幅なパフォーマンスの向上が明らかになります。 175 MB (400 万文字列) のデータセットの場合、デュアルコア システムで BufferedWriter を使用しない場合の書き込みには約 4 ~ 5 秒かかりました。これは、BufferedWriter で観察された最初の 40 秒に比べて大幅な改善を示しています。

書き込みパフォーマンスの測定

経験的証拠を提供するために、次のコード ブロックはパフォーマンス テストを示しています。これは、さまざまなバッファ サイズの BufferedWriter と直接 FileWriter を使用した書き込み時間を比較しています。

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;

public class FileWritingPerfTest {

    // ...

    private static void writeRaw(List<String> records) throws IOException {
        File file = File.createTempFile("foo", ".txt");
        try {
            FileWriter writer = new FileWriter(file);
            System.out.print("Writing raw... ");
            write(records, writer);
        } finally {
            file.delete();
        }
    }

    private static void writeBuffered(List<String> records, int bufSize) throws IOException {
        File file = File.createTempFile("foo", ".txt");
        try {
            FileWriter writer = new FileWriter(file);
            BufferedWriter bufferedWriter = new BufferedWriter(writer, bufSize);

            System.out.print("Writing buffered (buffer size: " + bufSize + ")... ");
            write(records, bufferedWriter);
        } finally {
            file.delete();
        }
    }

    private static void write(List<String> records, Writer writer) throws IOException {
        long start = System.currentTimeMillis();
        for (String record: records) {
            writer.write(record);
        }
        writer.close(); 
        long end = System.currentTimeMillis();
        System.out.println((end - start) / 1000f + " seconds");
    }

    // ...
}
ログイン後にコピー

結論

実験結果は、直接 FileWriter を使用すると大幅に書き込み時間を短縮できることを示しています。大規模なデータセットの書き込みパフォーマンス。この手法は、書き込み速度が重要なシナリオで特に有益です。これらの発見を活用することで、開発者はコードを最適化して、テキスト ファイル内の大量のデータを効率的に処理できます。

以上がJava で大きなテキスト ファイルを書き込む場合、BufferedWriter よりも Direct FileWriter を使用した方が高速ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート