风也温柔

计算机科学知识库

java 数据压缩传输 Java 文本数据的gzip压缩

  Java 文本数据的gzip压缩

  一、gzip

  Java提供的压缩方式有GZIP、和ZIP三种,其中GZIP带有CRC校验码、标识首部和尾部,数据部分和一致java 数据压缩传输,相对来说具有较高的压缩比和压缩速度且带有校验方式,但java的不提供压缩级别的设置,因此,改变压缩级别需要以继承等方式设置的压缩级别来实现。

  二、代码示例

   package com.company.example;

    import org.apache.commons.lang3.StringUtils;
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.nio.charset.StandardCharsets;
    import java.util.Base64;
    <p>![java udt可靠传输_java rmi传输对象_java 数据压缩传输][1]

    import java.util.zip.GZIPInputStream;
    import java.util.zip.GZIPOutputStream;
    public class Utills {
        /**
         * 文本数据gzip压缩
         */
        public static String gzipCompress(String text) {
            if (StringUtils.isEmpty(text)) {
                return null;
    &emsp;&emsp;![java rmi传输对象_java 数据压缩传输_java udt可靠传输][2]

            }
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            try (GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream)) {
                gzipOutputStream.write(text.getBytes(StandardCharsets.UTF_8));
                gzipOutputStream.flush();
                gzipOutputStream.finish();
            } catch (Exception e) {
                System.out.println(e);
                return null;
    &emsp;&emsp;

            }
            return Base64.getEncoder().encodeToString(byteArrayOutputStream.toByteArray());
        }
        /**
         * 文本数据gzip解压
         */
        public static String gzipDecompress(String text) {
            if (StringUtils.isEmpty(text)) {
    &emsp;&emsp;![java 数据压缩传输_java rmi传输对象_java udt可靠传输][3]

                return null;
            }
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(Base64.getDecoder().decode(text));
            try (GZIPInputStream gzipInputStream = new GZIPInputStream(byteArrayInputStream)){
                byte[] buffer = new byte[256];
                int len;
                while ((len = gzipInputStream.read(buffer)) != -1) {
                    byteArrayOutputStream.write(buffer, 0, len);
    &emsp;&emsp;![java rmi传输对象_java 数据压缩传输_java udt可靠传输][4]

                }
            }catch (Exception e){
                System.out.println(e);
                return null;
            }
            return byteArrayOutputStream.toString();
        }
    }

</p>
  三、总结

  对于数据包大小要求不是太高,服务端因各种历史因素未开启HTTP的压缩的java 数据压缩传输 Java 文本数据的gzip压缩,希望节省带宽提高数据传输效率的需求可以使用数据gzip压缩;编程环境安全性要求宽松的,可以考虑引入第三方的压缩算法java 数据压缩传输,如谷歌的算法,或者的zstd算法等。

  文章来源:https://blog.csdn.net/gehong3641/article/details/127079600