SORU
1 Mart 2010, PAZARTESİ


Java büyük dosyaları okuma

Çok iyi java ve hafıza sorunları bilen birinin tavsiyesine ihtiyacım var. Büyük bir dosya var (1.5 GB gibi bir şey) ve birçok bu dosyayı kes(örneğin 100 küçük dosyaları küçük dosyalara ihtiyacım var. Bunu yapmak için genellikle Biliyorum (bir BufferedReader kullanarak), ama eğer herhangi bir tavsiye bunu nasıl hafıza veya hızlı ipuçları ile ilgili varsa bilmek isterim. Benim dosya metin containt, ikili ve satır başına 20 karakter var.

CEVAP
1 Mart 2010, PAZARTESİ


Bellekten tasarruf etmek için, gereksiz yere/bellek veri depolama yinelenen değil (yani döngü dışında bir değişken atayın. Sadece çıkış işlemihemengiriş gelir gelmez.

Gerçekten BufferedReader ya da kullanmıyor olsanız fark etmez. Bazı örtülü olarak işaret ediyor olarak önemli ölçüde daha fazla bellek maliyeti olmaz. En yüksek performans sadece birkaç % vuracaktır. Aynı NİO kullanarak uygular. Sadece ölçülebilirlik, bellek kullanımı değil artıracaktır. Sadece iş parçacığı aynı dosya üzerinde çalışan yüzlerce olunca ilginç bir hal alacaktır.

Sadece dosya döngü, hemen okumak, satır sayısı ve 100, sonra da bir sonraki dosyaya geçiş ulaşırsa, vesaire gibi diğer dosya için her satırı yazın.

Örnek başlama:

String encoding = "UTF-8";
int maxlines = 100;
BufferedReader reader = null;
BufferedWriter writer = null;

try {
    reader = new BufferedReader(new InputStreamReader(new FileInputStream("/bigfile.txt"), encoding));
    int count = 0;
    for (String line; (line = reader.readLine()) != null;) {
        if (count   % maxlines == 0) {
            close(writer);
            writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("/smallfile"   (count / maxlines)   ".txt"), encoding));
        }
        writer.write(line);
        writer.newLine();
    }
} finally {
    close(writer);
    close(reader);
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • How To Cook That

    How To Cook

    16 NİSAN 2011
  • REK Roth Productions

    REK Roth Pro

    8 Ocak 2011
  • William Hyde

    William Hyde

    23 HAZİRAN 2008