Search code examples
javagzipgunzip

Compress a string to gzip in Java


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

When I save that string to a file, and run gunzip -d file.txt in unix, it complains:

gzip: gzip.gz: not in gzip format

Solution

  • Try to use 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();
         }
      }
     }
    

    About your code example try:

    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
    }