1

私はそのBufferedReaderように a を初期化します:

Reader reader = new BufferedReader(new InputStreamReader(new FileInputStream(filename), "UTF-8"));

filename任意の文字列です。

ループを介して出力を処理すると、次のようになります。

int k;
while((k = reader.read()) != -1){
        String entry;
        if (dict.containsKey(k))
            entry = dict.get(k);
        else if (k == mapSize)
            entry = w + w.charAt(0);
        else
            throw new IllegalArgumentException("Bad compressed k: " + k);
        this.fos.write(entry);
        result += entry;

        // Add w+entry[0] to the dictionary.
        dict.put(mapSize++, w + entry.charAt(0));

        w = entry;
}

65536EOFに達する前に文字数を読み取るだけです。ここで何が起こっているか知っている人はいますか?

4

2 に答える 2

2

電話する必要はありませんready()。データまたは行を読み取るだけです

String line;
while((line = reader.readLine()) != null) {
    //process, LZW algorithm
}

また

// buffer is redundant if you are reading large blocks.
Reader reader = new InputStreamReader(new FileInputStream(filename), "UTF-8");
char[] buffer = new char[8*1024];
int len;
while((len = reader.read(buffer)) > 0) {
    // process text
}
于 2012-04-29T14:12:38.327 に答える
0

バイナリデータを文字データとして読み取ろうとしています。それは悪くなるだろう。utf8 はマルチバイト文字エンコーディングです。つまり、ファイルから読み取る文字数は、ファイル内のバイト数と等しくない場合があります。解凍アルゴリズムを実装しようとしている場合は、 InputStream を使用して、charsではなくbytesを読み取る必要があります。

于 2012-04-29T15:04:31.073 に答える