SORU
3 Temmuz 2009, Cuma


GZİPİnputStream satır satır okuma

Bir dosyanın içinde .gz biçimi. Bu dosyayı okumak için bir java sınıfı GZİPİnputStream. Ancak, bu sınıf java BufferedReader sınıfını kapsamaz. Sonuç olarak, dosyayı satır satır okumak mümkün. Böyle bir şeye ihtiyacım var

reader  = new MyGZInputStream( some constructor of GZInputStream) 
reader.readLine()...

Ben benim sınıf oluşturma java Okuyucu ya da BufferedReader sınıfını genişletir ve değişken biri olarak GZİPİnputStream kullanın.

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Reader;
import java.util.zip.GZIPInputStream;

public class MyGZFilReader extends Reader {

    private GZIPInputStream gzipInputStream = null;
    char[] buf = new char[1024];

    @Override
    public void close() throws IOException {
    	gzipInputStream.close();
    }

    public MyGZFilReader(String filename)
               throws FileNotFoundException, IOException {
        gzipInputStream = new GZIPInputStream(new FileInputStream(filename));
    }

    @Override
    public int read(char[] cbuf, int off, int len) throws IOException {
    	// TODO Auto-generated method stub
    	return gzipInputStream.read((byte[])buf, off, len);
    }

}

Ama, bu kullandığımda çalışmıyor

BufferedReader in = new BufferedReader(
    new MyGZFilReader("F:/gawiki-20090614-stub-meta-history.xml.gz"));
System.out.println(in.readLine());

Birisi .. devam etmek için nasıl tavsiye

CEVAP
3 Temmuz 2009, Cuma


Dekoratör temel kurulum bu gibi:

InputStream fileStream = new FileInputStream(filename);
InputStream gzipStream = new GZIPInputStream(fileStream);
Reader decoder = new InputStreamReader(gzipStream, encoding);
BufferedReader buffered = new BufferedReader(decoder);

Bu parçasında önemli konu encoding değeridir. Bu karakter dosya metin kodlama. "US-ASCII", "UTF-8", "SHİFT-JIS", "ISO-8859-9", &üssün;? olanakları yüzlerce vardır, ve doğru seçimi genellikle dosya bulunamıyor kendisi belirlemez. Bant kanalı üzerinden belirtilmesi gerekir.

Örneğin, belki platform varsayılan. Bir ağ ortamında, ancak, bu son derece hassastır. Dosya komşu hücre otur diye yazdı, ama farklı bir varsayılan makine kodlama dosya.

Çoğu ağ protokolleri bir başlık veya başka bir meta açıkça karakter kodlamasını not için kullanın.

Bu durumda, içerik XML dosya uzantısı gibi görünüyor. XML"," bu amaç için. XML bildirimi öznitelik kodlama içerir Ayrıca, XML gerçekten metin olarak XML parser ile işlenmiş olmalıdır. XML-by-satır satır okuma kırılgan, özel bir durum gibi görünüyor.

Açıkça kodlama belirtmek için başarısız against the second commandment.Tehlike varsayılan kodlamayı kullan!

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DrePwn

    DrePwn

    22 Temmuz 2011
  • Joseph Herscher

    Joseph Hersc

    14 Mart 2007