Java: Error creating a GZIPInputStream: Not in GZIP format

前端 未结 3 2229
暖寄归人
暖寄归人 2020-12-17 23:39

I am trying to use the following Java code to compress and uncompress a String. But the line that creates a new GZipInputStream object out of a new ByteArrayInputStream obj

3条回答
  •  猫巷女王i
    2020-12-18 00:33

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

提交回复
热议问题