2013-06-27 7 views
7

में इन्फ्लेट करें मैं एक जावा ऐप से नोडजेस के माध्यम से एक वेबपृष्ठ पर संकुचित डेटा भेज रहा हूं। डेटा जावा डिफ्लेटर और बेस 64 एन्कोडेड के साथ संपीड़ित है। वेबपेज पर मैं https://github.com/dankogai/js-deflate के साथ डेटा को बढ़ाने की कोशिश कर रहा हूं, लेकिन यह काम नहीं करता है (खाली परिणाम)। क्या मैं कुछ भूल रहा हूँ?जावा में डिफ्लेट - जावास्क्रिप्ट

जावा पक्ष:

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; 
} 

जावास्क्रिप्ट पक्ष:

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

उत्तर

1

इस प्रयास करें:

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

JSInflate के साथ संयोजन में अच्छी तरह से काम करता है – ndsc

0

मैं एक ही समस्या में पड़ गए। जेएस-डिफ्लेट प्रोजेक्ट इन्फ्लेटर टूटा हुआ प्रतीत होता है। मैंने पाया कि यह एक छोटे इनपुट पर काम करेगा लेकिन एक लंबे इनपुट पर असफल होगा (उदाहरण के लिए, परीक्षण डेटा के रूप में lorem ipsum)।

एक बेहतर विकल्प zlib.js होने के लिए बाहर निकला।

यहाँ कैसे मैं इसे उपयोग कर रहा हूँ जावास्क्रिप्ट में एक JSON वस्तु है कि, उत्पन्न होता है संकुचित को बढ़ाने के लिए है, और बेस 64 सर्वर पर इनकोडिंग:

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 करें, सहायक कार्यों अन्य stackoverflow से प्राप्त कर रहे जवाब)।

संबंधित मुद्दे