Java Delta编码不起作用?

时间:2015-03-03 16:09:41

标签: java

我正在尝试实现此代码http://en.wikipedia.org/wiki/Delta_encoding 在java虽然它不工作。如果我用C ++做它可以正常工作,所以我一直在试图解决这个问题,我没有一个错误的俱乐部。

例如:

如果我读了一个文件。

input.txt中

这是对复制文件的测试。

它应该将编码文本写入文件中,它还应该能够读取编码文本并在另一个文件上解码。

像这样:

普通文字: 这是一个美好的世界。

编码文字: T¶☺ 一世 ⌠☼≈┤W°♥·°╩

解码文字: 这是一个美好的世界。 按任意键继续 。 。

我做错了什么?

public static void delta_encode(String filename) throws IOException{
    FileInputStream reader = null;
    FileOutputStream  writer = null;

    try{
        reader = new FileInputStream (filename);
        writer = new FileOutputStream ("encode.txt");

        char last = 0;
        int c;
        while((c = reader.read()) != -1){
            char current = (char)c;

            writer.write(current - last);
            last = current;
        }

    }finally{
        if(reader != null)
            reader.close();

        if(writer != null)
            writer.close();
    }
}

    public static void delta_decode(String filename) throws IOException{
    FileInputStream reader = null;
    FileOutputStream  writer = null;

    try{
        reader = new FileInputStream (filename);
        writer = new FileOutputStream ("decode.txt");

        char last = 0;
        int c;
        while((c = reader.read()) != -1){
            char current = (char)c;

            writer.write(current + last);
            last = current;
        }


    }finally{
        if(reader != null)
            reader.close();

        if(writer != null)
            writer.close();
    }
}

1 个答案:

答案 0 :(得分:0)

C和Java之间的一个核心差异是基元的编码。

您的错误是假设Java char与C char相同。它不是!

尝试使用byte代替char