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;

私が得ている特定のエラーは次のとおりです。改行文字がこの問題を引き起こしている理由がわかりません。どんな助けでも大歓迎です。

4

1 に答える 1

0

おそらく、hCodeマップには改行「文字」のエントリが含まれていないため、入力したhCode.get(letter)最初の2文字の「null」が返されますcode.substring(0, 8)

于 2012-11-06T15:36:08.523 に答える