0

我编写了一个程序,它使用霍夫曼编码来获取一个 .txt 文件并对其进行压缩。该程序采用压缩代码并将其保存为 .hzip 文件。在我尝试压缩并保存包含换行符的文件之前,代码工作正常。这是我保存文件的代码:

private void codeToFile() {

    String code = "";
    char letter;

    String fileName = this.encodeFileName.replace(".txt", ".hzip");

    FileOutputStream byteWriter = null;
    FileInputStream reader = null;
    try {

        byteWriter = new FileOutputStream(fileName);
        reader = new FileInputStream(this.encodeFileName);

        while (reader.available() > 0) {
            letter = (char) reader.read();

            code += hCode.get(letter);

            if (code.length() > 7) {
                int c = Integer.parseInt(code.substring(0, 8), 2)
                        + Byte.MIN_VALUE;
                byteWriter.write((byte) c);
                code = code.substring(8);
            }
        }

        if (code.length() > 0 && code.length() <= 7) {
            code += "0000000";
            int c = Integer.parseInt(code.substring(0, 8), 2)
                    + Byte.MIN_VALUE;
            byteWriter.write((byte) c);
        }
        byteWriter.close();

    } catch (IOException ex) {
        ex.printStackTrace();
    }
    System.out.println("===============================");
    System.out.println("File Created: " + fileName);

} 

我的错误总是出现在这一行:

int c = Integer.parseInt(code.substring(0, 8), 2)
                        + Byte.MIN_VALUE;

我得到的具体错误是:线程“AWT-EventQueue-0”中的异常 java.lang.NumberFormatException:对于输入字符串:“110001nu”。我不明白为什么换行符会导致此问题。任何帮助将非常感激。

4

1 回答 1

0

可能您的hCode地图不包含换行“字母”的条目,因此hCode.get(letter)返回“null”,您输入的前两个字母code.substring(0, 8)

于 2012-11-06T15:36:08.523 回答