Maison > Java > javaDidacticiel > L'utilisation de Direct FileWriter est-elle plus rapide que BufferedWriter pour écrire des fichiers texte volumineux en Java ?

L'utilisation de Direct FileWriter est-elle plus rapide que BufferedWriter pour écrire des fichiers texte volumineux en Java ?

DDD
Libérer: 2024-11-12 19:41:02
original
633 Les gens l'ont consulté

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

Amélioration de la vitesse d'écriture des données volumineuses dans des fichiers texte

Lorsque vous traitez des ensembles de données importants, l'optimisation des performances d'écriture des fichiers texte est cruciale. Bien que l’utilisation de BufferedWriter soit une technique courante, elle ne fournit pas toujours l’efficacité souhaitée. Cet article explore des approches alternatives pour accélérer l'écriture de données en Java.

Utilisation directe de FileWriter

Le BufferedWriter offre une approche tamponnée pour l'écriture de données. Cependant, contourner ce tampon peut potentiellement améliorer la vitesse sur les systèmes modernes, où les écritures sont généralement mises en cache dans la mémoire du lecteur. Pour y parvenir, remplacez simplement BufferedWriter par FileWriter dans votre code.

Tests empiriques

Les tests empiriques révèlent des gains de performances significatifs en utilisant un FileWriter direct. Pour un ensemble de données de 175 Mo (4 millions de chaînes), l'écriture sans BufferedWriter prenait environ 4 à 5 secondes sur un système dual-core. Cela représente une amélioration substantielle par rapport à la durée initiale de 40 secondes observée avec BufferedWriter.

Mesure des performances d'écriture

Pour fournir des preuves empiriques, le bloc de code suivant présente un test de performances qui compare les temps d'écriture à l'aide de BufferedWriter avec différentes tailles de tampon et un FileWriter direct :

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");
    }

    // ...
}
Copier après la connexion

Conclusion

Les résultats expérimentaux démontrent que l'utilisation d'un FileWriter direct peut améliorer considérablement performances d'écriture pour les grands ensembles de données. Cette technique est particulièrement bénéfique pour les scénarios où la vitesse d’écriture est critique. En tirant parti de ces résultats, les développeurs peuvent optimiser leur code pour gérer efficacement de gros volumes de données dans des fichiers texte.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal