霍夫曼编码文件保存

时间:2012-11-06 15:28:47

标签: java

我写了一个程序,它使用霍夫曼编码来获取.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”。我不明白为什么新行字符会导致此问题。任何帮助将非常感激。

1 个答案:

答案 0 :(得分:0)

您的hCode地图可能不包含新行'字母'的条目,因此hCode.get(letter)会返回'null',前两个字母是code.substring(0, 8)