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
Post a Comment