GZip二进制文件转换为字符串

时间:2017-03-07 15:14:50

标签: java arrays utf-8

我有以下测试代码来实现发送带有压缩字节数组的XML:

 byte[] data = null;
 String prova="";
     try {
         System.out.println("in: " + byteBuffer.array().length / 1024 + " Kb");  
         data=CompressionUtils.compress(byteBuffer.array());
         prova=new String(data,"UTF-8");
         System.out.println("out: " + data.length / 1024 + " Kb");  
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
     byte[] dataDec = null;
     try {
         System.out.println("in: " + data.length / 1024 + " Kb");
        dataDec=CompressionUtils.decompress(data);
        System.out.println("out: " + dataDec.length / 1024 + " Kb");
        System.out.println("UTF step");
         System.out.println("in: " + prova.getBytes("UTF-8").length / 1024 + " Kb");
        dataDec=CompressionUtils.decompress(prova.getBytes("UTF-8"));
        System.out.println("out: " + dataDec.length / 1024 + " Kb");

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (DataFormatException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

其中数据是我需要压缩并发送为xml ..

压缩和解压缩原始byte []数据时,如果我在utf-8中转换高于压缩数据的de以供以后使用。我尝试获取byte []数据的那一刻,在解压缩时我得到:

in: 1250 Kb
Original: 1250 Kb
Compressed: 4 Kb
out: 4 Kb
in: 4 Kb
Original: 4393b
DeCompressed: 1280000b
out: 1250 Kb
UTF step
in: 10 Kb
java.util.zip.DataFormatException: incorrect header check
    at java.util.zip.Inflater.inflateBytes(Native Method)
    at java.util.zip.Inflater.inflate(Unknown Source)
    at java.util.zip.Inflater.inflate(Unknown Source)
    at ygg.commons.compression.CompressionUtils.decompress(CompressionUtils.java:52)
    at ygg.view.video.display.main(display.java:193)

完整参考:

 public static byte[] compress(byte[] data) throws IOException {  
  Deflater deflater = new Deflater();  
  deflater.setInput(data);  
  ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length);   
  deflater.finish();  
  byte[] buffer = new byte[1024];   
  while (!deflater.finished()) {  
   int count = deflater.deflate(buffer); // returns the generated code... index  
   outputStream.write(buffer, 0, count);   
  }  
  outputStream.close();  
  byte[] output = outputStream.toByteArray();  
  System.out.println("Original: " + data.length / 1024 + " Kb");  
  System.out.println("Compressed: " + output.length / 1024 + " Kb");  
  return output;  
 }  
 public static byte[] decompress(byte[] data) throws IOException, DataFormatException {  
  Inflater inflater = new Inflater();   
  inflater.setInput(data);  
  ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length);  
  byte[] buffer = new byte[1024];  
  while (!inflater.finished()) {  
   int count = inflater.inflate(buffer);  
   outputStream.write(buffer, 0, count);  
  }  
  outputStream.close();  
  byte[] output = outputStream.toByteArray();  
  System.out.println("Original: " + data.length);  
  System.out.println("DeCompressed: " + output.length);  
  return output;  
 }  

我的问题是转型

byte []

=>缩减字节[]

=> UTF-8字符串

=> byte [](以UTF-8开头)

=>膨胀(原始)字节[]是可能的吗?

我做错了什么?另外现在我注意到UTF-8字符串的大小增加了一倍,还有什么改进空间?

0 个答案:

没有答案