GZIP decompress string and byte conversion

Griever

New Member
I have a problem in code:\[code\]private static String compress(String str){ String str1 = null; ByteArrayOutputStream bos = null; try { bos = new ByteArrayOutputStream(); BufferedOutputStream dest = null; byte b[] = str.getBytes(); GZIPOutputStream gz = new GZIPOutputStream(bos,b.length); gz.write(b,0,b.length); bos.close(); gz.close(); } catch(Exception e) { System.out.println(e); e.printStackTrace(); } byte b1[] = bos.toByteArray(); return new String(b1);}private static String deCompress(String str){ String s1 = null; try { byte b[] = str.getBytes(); InputStream bais = new ByteArrayInputStream(b); GZIPInputStream gs = new GZIPInputStream(bais); ByteArrayOutputStream baos = new ByteArrayOutputStream(); int numBytesRead = 0; byte [] tempBytes = new byte[6000]; try { while ((numBytesRead = gs.read(tempBytes, 0, tempBytes.length)) != -1) { baos.write(tempBytes, 0, numBytesRead); } s1 = new String(baos.toByteArray()); s1= baos.toString(); } catch(ZipException e) { e.printStackTrace(); } } catch(Exception e) { e.printStackTrace(); } return s1;}public String test() throws Exception { String str = "teststring"; String cmpr = compress(str); String dcmpr = deCompress(cmpr);}\[/code\]This code throw java.io.IOException: unknown format (magic number ef1f) \[code\]GZIPInputStream gs = new GZIPInputStream(bais);\[/code\]It turns out that when converting byte \[code\]new String (b1)\[/code\] and the \[code\]byte b [] = str.getBytes ()\[/code\] bytes are "spoiled." At the output of the line we have already more bytes. If you avoid the conversion to a string and work on the line with bytes - everything works. Sorry for my English.\[code\]public String unZip(String zipped) throws DataFormatException, IOException { byte[] bytes = zipped.getBytes("WINDOWS-1251"); Inflater decompressed = new Inflater(); decompressed.setInput(bytes); byte[] result = new byte[100]; ByteArrayOutputStream buffer = new ByteArrayOutputStream(); while (decompressed.inflate(result) != 0) buffer.write(result); decompressed.end(); return new String(buffer.toByteArray(), charset);}\[/code\]I'm use this function to decompress server responce. Thanks for help.
 
Back
Top