1

我这样初始化 a BufferedReader

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

它只65536在到达 EOF 之前读取字符数。有人知道这里发生了什么吗?

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 并读取bytes,而不是chars

于 2012-04-29T15:04:31.073 回答