2013-06-27 8 views
7

Invio dati compressi da un'app java tramite nodejs a una pagina web. I dati sono compressi con java deflater e base64 codificati. Nella pagina Web sto provando a gonfiare i dati con https://github.com/dankogai/js-deflate, ma non funziona (risultato vuoto). Mi sto perdendo qualcosa?Deflate in Java - Gonfia in Javascript

Java lato:

private String compress(String s) { 
    DeflaterOutputStream def = null; 
    String compressed = null; 
    try { 
     ByteArrayOutputStream out = new ByteArrayOutputStream(); 
     // create deflater without header 
     def = new DeflaterOutputStream(out, new Deflater(Deflater.DEFAULT_COMPRESSION, true)); 
     def.write(s.getBytes()); 
     def.close(); 
     compressed = Base64.encodeBase64String(out.toByteArray()); 
     System.out.println(compressed); 
    } catch(Exception e) { 
     Log.c(TAG, "could not compress data: " + e); 
    } 
    return compressed; 
} 

JavaScript lato:

var data = RawDeflate.inflate(Base64.fromBase64(compressed)); 

risposta

1

Prova questa:

public static String compressAndEncodeString(String str) { 
    DeflaterOutputStream def = null; 
    String compressed = null; 
    try { 
     ByteArrayOutputStream out = new ByteArrayOutputStream(); 
     // create deflater without header 
     def = new DeflaterOutputStream(out, new Deflater(Deflater.BEST_COMPRESSION, true)); 
     def.write(str.getBytes()); 
     def.close(); 
     compressed = Base64.encodeToString(out.toByteArray(), Base64.DEFAULT); 
    } catch(Exception e) { 
     Log.e(TAG, "could not compress data: " + e); 
    } 
    return compressed; 
} 
+0

Funziona bene in combinazione con JSInflate – ndsc

0

Ho incontrato lo stesso problema. L'inflater del progetto js-deflate appare rotto. Ho scoperto che avrebbe funzionato su un breve input ma non su un input lungo (ad esempio, lorem ipsum come dati di test).

Un'opzione migliore risultava essere zlib.js.

Ecco come sto usando per gonfiare in Javascript un oggetto JSON che viene generato, compresso e con codifica Base64 sul server:

var base64toBinary = function (base64) { 
    var binary_string = window.atob(base64); 
    var len = binary_string.length; 
    var bytes = new Uint8Array(len); 
    for (var i = 0; i < len; i++)  { 
     var ascii = binary_string.charCodeAt(i); 
     bytes[i] = ascii; 
    } 
    return bytes.buffer; 
} 

var utf8ToString = function (uintArray) { 
    var encodedString = String.fromCharCode.apply(null, uintArray), 
     decodedString = decodeURIComponent(escape(encodedString)); 
    return decodedString; 
} 

var object = JSON.parse(utf8ToString(
    new Zlib.RawInflate(base64toBinary(base64StringFromServer)).decompress())); 

(FYI, le funzioni di supporto sono derivate da altre StackOverflow risposte).

Problemi correlati