2013-06-27 24 views
7

Wysyłam skompresowane dane z aplikacji java przez nodejs do strony internetowej. Dane są kompresowane za pomocą deflatora Java i kodowania base64. Na stronie próbuję nadmuchać dane za pomocą https://github.com/dankogai/js-deflate, ale to nie działa (pusty wynik). Czy czegoś brakuje?Deflate w Javie - napompować w JavaScript

strona Java:

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 strona:

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

Odpowiedz

1

Spróbuj tego:

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

Dobrze działa w połączeniu z JSInflate – ndsc

0

wpadłem na ten sam problem. Opóźnienie projektu js-deflate wydaje się zepsute. Zauważyłem, że działa on na krótkich wejściach, ale kończy się niepowodzeniem na długim wejściu (np. Lorem ipsum jako dane testowe).

Lepszą opcją okazało się być zlib.js.

Oto jak używam go nadmuchać w JavaScript obiekt JSON, który jest generowany, skompresowany i zakodowany base64 na serwerze:

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, funkcje pomocnicze pochodzą z innych stackoverflow odpowiedzi).