Mixing String
and byte[]
; that does never fit. And only works on the the same OS with same encoding. Not every byte[]
can be converted to a String
, and the conversion back could give other bytes.
The compressedBytes
need not represent a String.
Explicitly set the encoding in getBytes
and new String
.
String orig = "............."; // Compress it ByteArrayOutputStream baostream = new ByteArrayOutputStream(); OutputStream outStream = new GZIPOutputStream(baostream); outStream.write(orig.getBytes("UTF-8")); outStream.close(); byte[] compressedBytes = baostream.toByteArray(); // toString not always possible // Uncompress it InputStream inStream = new GZIPInputStream( new ByteArrayInputStream(compressedBytes)); ByteArrayOutputStream baoStream2 = new ByteArrayOutputStream(); byte[] buffer = new byte[8192]; int len; while ((len = inStream.read(buffer)) > 0) { baoStream2.write(buffer, 0, len); } String uncompressedStr = baoStream2.toString("UTF-8"); System.out.println("orig: " + orig); System.out.println("unc: " + uncompressedStr);