【问题标题】:Equivalent Inflate for Deflate function in JavaJava 中 Deflate 函数的等效 Inflate
【发布时间】:2019-07-30 21:14:17
【问题描述】:

我有一个Java解压功能。我想要相同的压缩功能。现在我的 deflate 函数给出了完全不同的输出。功能如下:

        public static String 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();      
       return new String(Base64.getEncoder().encode(output));  
      }  

      public static String decompress(byte[] data) throws IOException, DataFormatException {  
       Inflater inflater = new Inflater(true);   
       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();  

       return new String(output); 
      }  

使用用于解压缩功能 “LcrJCYAwEEDRVlKBzmJmnNwELx4EW8haxRRvEOFfPrzzuSSamOtKthKgBaQEMAvH7QjqDLaoOE7C8JNElEg / EZ2iS61QtkbKuJeR5woz59FBWhduLw ==” 给出“DPI65969 | 2019年7月29日12:00:00 AM | 107 | 309.76 | 1 | 2019年7月30日上午01时22分27秒| 15 | 25|6cc0b4d27318bfa6cc6333afe06de63d"

但在压缩函数中使用“DPI65969|7/29/2019 12:00:00 AM|107|309.76|1|7/30/2019 1:22:27 AM|15|25|6cc0b4d27318bfa6cc6333afe06de63d”会得到“eJwtyskJgDAQQNFWUoHOYmac3AQvHH +vPO5JJqY60q2EqAFpAQwC8ftCOoMtqg4TsLwk0SUSD8RnaJLrVC2Rsq4l5HnCjPn0UFaF24vAkwaGg==" 但我期望压缩结果相同。

我不想改变我的解压功能,因为它在其他地方被广泛使用。

我正在使用这些功能如下:

        public static void main(String[] args) 
        { 
            try{
                //Compress Block
             String strTocompress="DPI65969|7/29/2019 12:00:00 AM|107|309.76|1|7/30/2019 1:22:27 AM|15|25|6cc0b4d27318bfa6cc6333afe06de63d";   
             byte[] bytes = strTocompress.getBytes("ASCII");
             String encoded = compress(bytes);
             System.out.println(encoded); 
             //End of Compress Block
             //***********Decompress Block**************
             String strToDecompress="LcrJCYAwEEDRVlKBzmJmnNwELx4EW8haxRRvEOFfPrzzuSSamOtKthKgBaQEMAvH7QjqDLaoOE7C8JNElEg/EZ2iS61QtkbKuJeR5woz59FBWhduLw==";   
             byte[] bytes1 = Base64.getDecoder().decode(strToDecompress.getBytes());
             String decoded = decompress(bytes1);
             System.out.println(decoded); 
             //End of Decompress Block
            }       
            catch(Exception e)
            {
                System.out.println(e.getMessage());
            }
        } 

【问题讨论】:

    标签: java deflate inflate


    【解决方案1】:
        String s = "hello"; 
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        Deflater compresser = new Deflater(Deflater.BEST_COMPRESSION, true);
        DeflaterOutputStream deflaterOutputStream = new DeflaterOutputStream(stream, 
        compresser);
        deflaterOutputStream.write(s.getBytes());
        deflaterOutputStream.close();
        byte[] output= new Base64().encode(stream.toByteArray());
        String re1 = new String(output);
    

    【讨论】:

    • 这是做同样事情的另一种方式
    【解决方案2】:

    @Kartikeya 您需要更换 Deflater deflater = new Deflater(); 符合 Deflater deflater = new Deflater(Deflater.BEST_COMPRESSION,true); 在你的压缩函数中。

     public static String compress(byte[] data) throws IOException {  
       Deflater deflater = new Deflater(Deflater.BEST_COMPRESSION,true);
       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();      
       return new String(Base64.getEncoder().encode(output));  
      }  
    

    【讨论】:

    • 感谢您的回答。它按我的预期工作。你摇滚!!
    猜你喜欢
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    • 2021-09-15
    • 1970-01-01
    相关资源
    最近更新 更多