2013-09-27 4 views
9
public static String compressString(String str) throws IOException{ 
    if (str == null || str.length() == 0) { 
     return str; 
    } 
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    GZIPOutputStream gzip = new GZIPOutputStream(out); 
    gzip.write(str.getBytes()); 
    gzip.close(); 
    Gdx.files.local("gziptest.gzip").writeString(out.toString(), false); 
    return out.toString(); 
} 

में gzip के लिए जब मैं एक फाइल करने के लिए कि स्ट्रिंग बचाने के लिए, और यूनिक्स में gunzip -d file.txt चलाने के लिए, यह शिकायत: उपयोग करने के लिएएक स्ट्रिंग संक्षिप्त जावा

gzip: gzip.gz: not in gzip format 
+0

आप बस [FileOutputStream (बाइटएरेऑटपुटस्ट्रीम के स्थान पर) का उपयोग क्यों नहीं करते हैं (http://stackoverflow.com/questions/5994674/java-save-string-as-gzip-file)? क्या आपने कोशिश की है कि तब क्या होता है? –

+0

यह libgdx है, जो एक क्रॉस-प्लेटफार्म गेम विकास पुस्तकालय है। मैंने इसे केवल समस्या निवारण के लिए फ़ाइल में लिखा था। मैं वास्तव में अपने फ्लास्क सर्वर पर http POST अनुरोध के माध्यम से स्ट्रिंग भेजने की कोशिश कर रहा हूं, लेकिन सर्वर पक्ष ने शिकायत की कि स्ट्रिंग मान्य gzip मान्य नहीं है। – kelorek

+0

मुझे लगता है कि समस्या संपीड़ित डेटा का एक स्ट्रिंग में आपका रूपांतरण है। मुझे लगता है कि आपको परिणाम को बाइट [] के रूप में देखना चाहिए। Libgdx एक बाइट [] एक फ़ाइल में लिख सकते हैं? –

उत्तर

11

कोशिश BufferedWriter

public static String compressString(String str) throws IOException{ 
if (str == null || str.length() == 0) { 
    return str; 
} 

BufferedWriter writer = null; 

try{ 
    File file = new File("your.gzip") 
    GZIPOutputStream zip = new GZIPOutputStream(new FileOutputStream(file)); 

    writer = new BufferedWriter(new OutputStreamWriter(zip, "UTF-8")); 

    writer.append(str); 
} 
finally{   
    if(writer != null){ 
    writer.close(); 
    } 
    } 
} 

बारे में आपका कोड उदाहरण आज़माएं:

public static String compressString(String str) throws IOException{ 
if (str == null || str.length() == 0) { 
    return str; 
} 
ByteArrayOutputStream out = new ByteArrayOutputStream(str.length()); 
GZIPOutputStream gzip = new GZIPOutputStream(out); 
gzip.write(str.getBytes()); 
gzip.close(); 

byte[] compressedBytes = out.toByteArray(); 

Gdx.files.local("gziptest.gzip").writeBytes(compressedBytes, false); 
out.close(); 

return out.toString(); // I would return compressedBytes instead String 
} 
+0

यह एक वैध gzip वस्तु बनाता है। मैं वास्तव में एक स्ट्रिंग वापस करने के लिए देख रहा हूँ। क्या मैं फाइल लिखना छोड़ सकता हूं? – kelorek

+0

अपने उदाहरण के लिए पहले प्रयास करें: 'ByteArrayOutputStream out = new ByteArrayOutputStream (str.length()); ' –

+0

यह काम नहीं करता है। – kelorek

2

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

//... 

String string = "string"; 

FileOutputStream fos = new FileOutputStream("filename.zip"); 

GZIPOutputStream gzos = new GZIPOutputStream(fos); 
gzos.write(string.getBytes()); 
gzos.finish(); 

//... 
0

बाइट्स सहेजें FileOutputStream

FileOutputStream fos = new FileOutputStream("gziptest.gz"); 
fos.write(out.toByteArray()); 
fos.close(); 

out.toString() के साथ बाहर से संदिग्ध लगता है, परिणाम, अपठनीय हो सकता है अगर आप ध्यान तो क्यों वापस नहीं बाइट [न ], अगर आपको परवाह है तो यह हेक्स या बेस 64 स्ट्रिंग के रूप में बेहतर लगेगा।

+0

सहमत हैं, मैं 'byte.toByteArray()' से 'बाइट []' वापस कर दूंगा –

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