В чем разница между javascript deflate и java.util.zip.Deflater - PullRequest
2 голосов
/ 01 февраля 2012

Я написал немного кода Javascript. сжать с base64 и сдуть

function base64 (str) {
    return new Buffer(str).toString("base64");
}

function deflate (str) {
    return RawDeflate.deflate(str);
}

function encode (str) {
    return base64(deflate(str));
}
var str = "hello, world";
console.log("Test Encode");
console.log(encode(str));

Я преобразовал "привет, мир" в 2f8d48710d6e4229b032397b2492f0c2

и я хочу распаковать эту строку (2f8d48710d6e4229b032397b2492f0c2) в Java

Я положил str в файл, затем:

public static String decompress1951(final String theFilePath) {
    byte[] buffer = null;

    try {
        String ret = "";
        System.out.println("can come to ret");

        InputStream in = new InflaterInputStream(new Base64InputStream(new FileInputStream(theFilePath)), new Inflater(true));
        System.out.println("can come to in");
        while (in.available() != 0) {
            buffer = new byte[20480];
*****line 64 excep happen            int len = in.read(buffer, 0, 20480);
            if (len <=0) {
                break;
            }
            ret = ret + new String(buffer, 0, len);
        }
        in.close();
        return ret;

    } catch (IOException e) {
        System.out.println("Has IOException");
        System.out.println(e.getMessage());

        e.printStackTrace();
    }
    return "";
}

Но у меня есть исключение:

java.util.zip.ZipException: invalid stored block lengths
    at java.util.zip.InflaterInputStream.read(Unknown Source)
    at com.cnzz.mobile.datacollector.DecompressDeflate.decompress1951(DecompressDeflate.java:64)
    at com.cnzz.mobile.datacollector.DecompressDeflate.main(DecompressDeflate.java:128)

1 Ответ

0 голосов
/ 18 октября 2012

Java-код там прекрасно работает.Как и в комментарии, вы как-то неправильно поняли закодированное значение.Закодированное значение, которое я получил, используя значение javascript, равно y0jNycnXUSjPL8pJAQA=

Затем, когда вы копируете это значение в файл и вызываете decompress1951, вы фактически получаете обратно hello, world, как требуется.Не знаю, что сказать о части javascript, так как используемый вами код хорошо синхронизируется с примерами на веб-страницах распространения.Я замечаю, что оригинал и вилка , так что, может быть, там какая-то путаница?В любом случае есть jsfiddle , который, я думаю, можно рассматривать как рабочую версию, если вы хотите взглянуть на нее.

...