java - Why am I not getting my original string after compression and decompression? -


i trying use java.util.zip.* package perform lossless compression/decompression.

and have used apache's jar encode , decode string used argument in base64 charset.

following in code 2 static methods 1 each compression , 1 decompression.

import java.io.unsupportedencodingexception; import java.nio.charset.charset; import java.util.zip.*;  import org.apache.commons.codec.binary.base64;  public class main {      public string compress(string stringtocompress) throws unsupportedencodingexception     {                //system.out.println("string compressed :: " + stringtocompress);         byte[] input = base64.decodebase64(stringtocompress);          deflater compressor = new deflater();         compressor.setinput(input);         compressor.finish();          byte[] output = new byte[100];         compressor.deflate(output);         return base64.encodebase64string(output);     }      public string decompresstostring(string stringtodecompress) throws unsupportedencodingexception, dataformatexception     {            //system.out.println("string decompressed :: " + stringtodecompress);         byte[] input = base64.decodebase64(stringtodecompress);          inflater decompressor = new inflater();         decompressor.setinput(input,0,input.length);          byte[] output = new byte[100];         decompressor.inflate(output);         decompressor.end();          return base64.encodebase64string(output);     }       public static void main(string[] args) throws unsupportedencodingexception, dataformatexception {         main m = new main();         string strtobecompressed  = "jhjksdhgfkjdsfhkjhjvblkajnlkdfmvlksjfdovbjaiudhv adjv ajgvoig avigogauguivadfhijbjkla";         string compressedstring  = m.compress(strtobecompressed) ;         string decompressedstring = m.decompresstostring(compressedstring);          system.out.println("original :: " + strtobecompressed);         system.out.println("compressed :: " + compressedstring);         system.out.println("decompressed :: " + decompressedstring);     } } 

here output.

original :: jhjksdhgfkjdsfhkjhjvblkajnlkdfmvlksjfdovbjaiudhv adjv ajgvoig avigogauguivadfhijbjkla compressed :: ejwbpqdc/44y5lhyyh5i3bh4zi4y725zgo55zhx5r5zli33al242ornyb2ny72o4l6iogr4okigrolor2nx4yo245jxcvx/9aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa== decompressed :: jhjksdhgfkjdsfhkjhjvblkajnlkdfmvlksjfdovbjaiudhvadjvajgvoigavigogauguivadfhijbjklqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa== 

if see output original , decompressed string not matching. don't know why? can 1 tell me reason.

i think should separate concerns , treat compression, uncompression, base 64 encode , base64 decode separate concerns in separate methods. not able deduce why have involved base64 - perhaps there reason. maybe want compressed string base64 encoded?

anyway, here version of code can compress , uncompress string without loss (but no base64 involved):

package dk.tbsalling.stackoverflow;  import java.io.unsupportedencodingexception; import java.nio.charset.charset; import java.util.arrays; import java.util.zip.*;  import org.apache.commons.codec.binary.base64;  public class app {     private byte[] compress(string stringtocompress) throws unsupportedencodingexception     {         byte[] compresseddata = new byte[1024];         byte[] stringasbytes = stringtocompress.getbytes("utf-8");          deflater compressor = new deflater();         compressor.setinput(stringasbytes);         compressor.finish();         int compresseddatalength = compressor.deflate(compresseddata);          return arrays.copyof(compresseddata, compresseddatalength);     }      private string decompresstostring(byte[] compresseddata) throws unsupportedencodingexception, dataformatexception     {            inflater decompressor = new inflater();         decompressor.setinput(compresseddata, 0, compresseddata.length);         byte[] output = new byte[1024];         int decompresseddatalength = decompressor.inflate(output);         decompressor.end();          return new string(output, 0, decompresseddatalength, "utf-8");     }      public static void main(string[] args) throws unsupportedencodingexception, dataformatexception {         app m = new app();         string strtobecompressed  = "jhjksdhgfkjdsfhkjhjvblkajnlkdfmvlksjfdovbjaiudhv adjv ajgvoig avigogauguivadfhijbjkla";         byte[] compresseddata  = m.compress(strtobecompressed);         string decompressedstring = m.decompresstostring(compresseddata);          system.out.println("original     :: " + strtobecompressed.length() + " " + strtobecompressed);         system.out.println("compressed   :: " + compresseddata.tostring());         system.out.println("decompressed :: " + decompressedstring.length() + " " + decompressedstring);     } } 

this produces output:

original     :: 85 jhjksdhgfkjdsfhkjhjvblkajnlkdfmvlksjfdovbjaiudhv adjv ajgvoig avigogauguivadfhijbjkla compressed   :: [b@3ced0338 decompressed :: 85 jhjksdhgfkjdsfhkjhjvblkajnlkdfmvlksjfdovbjaiudhv adjv ajgvoig avigogauguivadfhijbjkla  process finished exit code 0 

update

here code producing base64-encoded representation of compressed string:

package dk.tbsalling.stackoverflow;  import java.io.unsupportedencodingexception; import java.nio.charset.charset; import java.util.arrays; import java.util.zip.*;  import org.apache.commons.codec.binary.base64;  public class app {     private string compress(string stringtocompress) throws unsupportedencodingexception     {         byte[] compresseddata = new byte[1024];         byte[] stringasbytes = stringtocompress.getbytes("utf-8");          deflater compressor = new deflater();         compressor.setinput(stringasbytes);         compressor.finish();         int compresseddatalength = compressor.deflate(compresseddata);          byte[] bytes = arrays.copyof(compresseddata, compresseddatalength);         return base64.encodebase64string(bytes);     }      private string decompresstostring(string base64string) throws unsupportedencodingexception, dataformatexception     {         byte[] compresseddata = base64.decodebase64(base64string);          inflater decompressor = new inflater();         decompressor.setinput(compresseddata, 0, compresseddata.length);         byte[] output = new byte[1024];         int decompresseddatalength = decompressor.inflate(output);         decompressor.end();          return new string(output, 0, decompresseddatalength, "utf-8");     }      public static void main(string[] args) throws unsupportedencodingexception, dataformatexception {         app m = new app();         string strtobecompressed  = "jhjksdhgfkjdsfhkjhjvblkajnlkdfmvlksjfdovbjaiudhv adjv ajgvoig avigogauguivadfhijbjkla";         string compresseddata  = m.compress(strtobecompressed);         string decompressedstring = m.decompresstostring(compresseddata);          system.out.println("original     :: " + strtobecompressed.length() + " " + strtobecompressed);         system.out.println("compressed   :: " + compresseddata.tostring());         system.out.println("decompressed :: " + decompressedstring.length() + " " + decompressedstring);     } } 

this produces output:

original     :: 85 jhjksdhgfkjdsfhkjhjvblkajnlkdfmvlksjfdovbjaiudhv adjv ajgvoig avigogauguivadfhijbjkla compressed   :: ejwnxmknwdaibmbw3bow4lhi/ldy+pn5daj1ndwkei0kae4uwdul9rdrwvrwq3i0uetxb+djx8l04zi+svglxea1fndsilu= decompressed :: 85 jhjksdhgfkjdsfhkjhjvblkajnlkdfmvlksjfdovbjaiudhv adjv ajgvoig avigogauguivadfhijbjkla  process finished exit code 0 

Comments