`

Gzip 的使用

    博客分类:
  • java
阅读更多

在网络传输中,为了减少网络的开支,对传输的数据一般要进行压缩,下面是一种比较常见的压缩方法

import java.util.zip.*;<o:p></o:p>

import java.io.*;<o:p></o:p>

public <st1:rtx>cl</st1:rtx>ass testGzip {<o:p></o:p>

  /**<o:p></o:p>

     * 将对象转换成字节数组<o:p></o:p>

     * @param obje<st1:rtx>ct</st1:rtx><o:p></o:p>

     * @return<o:p></o:p>

     * @throws IOException<o:p></o:p>

     */<o:p></o:p>

    public static byte[] toBytes(Serializable obje<st1:rtx>ct</st1:rtx>) throws Exception {<o:p></o:p>

        ByteArrayOutputStream byteStream = new ByteArrayOutputStream();<o:p></o:p>

        Obje<st1:rtx>ct</st1:rtx>OutputStream obje<st1:rtx>ct</st1:rtx>Stream = new Obje<st1:rtx>ct</st1:rtx>OutputStream(byteStream);<o:p></o:p>

        obje<st1:rtx>ct</st1:rtx>Stream.writeObje<st1:rtx>ct</st1:rtx>(obje<st1:rtx>ct</st1:rtx>);<o:p></o:p>

        obje<st1:rtx>ct</st1:rtx>Stream.flush();<o:p></o:p>

        obje<st1:rtx>ct</st1:rtx>Stream.<st1:rtx>cl</st1:rtx>ose();<o:p></o:p>

        return byteStream.toByteArray();<o:p></o:p>

    }<o:p></o:p>

    /**<o:p></o:p>

     * 将字节数组转换成对象<o:p></o:p>

     * @param bytes<o:p></o:p>

     * @return<o:p></o:p>

     */<o:p></o:p>

    public static Obje<st1:rtx>ct</st1:rtx> toObje<st1:rtx>ct</st1:rtx>(byte[] bytes) throws Exception {<o:p></o:p>

        ByteArrayInputStream byteStream = new ByteArrayInputStream(bytes);<o:p></o:p>

        Obje<st1:rtx>ct</st1:rtx>InputStream obje<st1:rtx>ct</st1:rtx>Stream = new Obje<st1:rtx>ct</st1:rtx>InputStream(byteStream);<o:p></o:p>

        Obje<st1:rtx>ct</st1:rtx> obje<st1:rtx>ct</st1:rtx> = obje<st1:rtx>ct</st1:rtx>Stream.readObje<st1:rtx>ct</st1:rtx>();<o:p></o:p>

        obje<st1:rtx>ct</st1:rtx>Stream.<st1:rtx>cl</st1:rtx>ose();<o:p></o:p>

        return obje<st1:rtx>ct</st1:rtx>;<o:p></o:p>

    }<o:p></o:p>

    /**<o:p></o:p>

     * 通过GZIP算法压缩将对象转换成字节数组<o:p></o:p>

     * @param obje<st1:rtx>ct</st1:rtx><o:p></o:p>

     * @return<o:p></o:p>

     * @throws java.lang.Exception<o:p></o:p>

     *<o:p></o:p>

     * The ZIP format, which is record-based, is not rea<st1:rtx>ll</st1:rtx>y suitable for this job.<o:p></o:p>

     * The GZIP is more appropriate as it operates on a single stream of data.<o:p></o:p>

     */<o:p></o:p>

    public static byte[] toByteByGZIP(Serializable obje<st1:rtx>ct</st1:rtx>) throws Exception {<o:p></o:p>

        ByteArrayOutputStream byteStream = new ByteArrayOutputStream();<o:p></o:p>

        GZIPOutputStream gzipStream = new GZIPOutputStream(byteStream);<o:p></o:p>

        Obje<st1:rtx>ct</st1:rtx>OutputStream obje<st1:rtx>ct</st1:rtx>Stream = new Obje<st1:rtx>ct</st1:rtx>OutputStream(gzipStream);<o:p></o:p>

        obje<st1:rtx>ct</st1:rtx>Stream.writeObje<st1:rtx>ct</st1:rtx>(obje<st1:rtx>ct</st1:rtx>);<o:p></o:p>

        obje<st1:rtx>ct</st1:rtx>Stream.flush();<o:p></o:p>

        obje<st1:rtx>ct</st1:rtx>Stream.<st1:rtx>cl</st1:rtx>ose();<o:p></o:p>

        gzipStream.<st1:rtx>cl</st1:rtx>ose();<o:p></o:p>

        return byteStream.toByteArray();<o:p></o:p>

    }<o:p></o:p>

    /**<o:p></o:p>

     * 通过GZIP算法压缩将字节数组转换成对象<o:p></o:p>

     * @param bytes<o:p></o:p>

     * @return<o:p></o:p>

     * @throws java.lang.Exception<o:p></o:p>

     *<o:p></o:p>

     * The ZIP format, which is record-based, is not rea<st1:rtx>ll</st1:rtx>y suitable for this job.<o:p></o:p>

     * The GZIP is more appropriate as it operates on a single stream of data.<o:p></o:p>

     */<o:p></o:p>

    public static Obje<st1:rtx>ct</st1:rtx> toObje<st1:rtx>ct</st1:rtx>ByGZIP(byte[] bytes) throws Exception {<o:p></o:p>

        ByteArrayInputStream byteStream = new ByteArrayInputStream(bytes);<o:p></o:p>

        GZIPInputStream gzipStream = new GZIPInputStream(byteStream);<o:p></o:p>

        Obje<st1:rtx>ct</st1:rtx>InputStream obje<st1:rtx>ct</st1:rtx>Stream = new Obje<st1:rtx>ct</st1:rtx>InputStream(gzipStream);<o:p></o:p>

        Obje<st1:rtx>ct</st1:rtx> obje<st1:rtx>ct</st1:rtx> = obje<st1:rtx>ct</st1:rtx>Stream.readObje<st1:rtx>ct</st1:rtx>();<o:p></o:p>

        obje<st1:rtx>ct</st1:rtx>Stream.<st1:rtx>cl</st1:rtx>ose();<o:p></o:p>

        gzipStream.<st1:rtx>cl</st1:rtx>ose();<o:p></o:p>

        return obje<st1:rtx>ct</st1:rtx>;<o:p></o:p>

    }<o:p></o:p>

    /**<o:p></o:p>

     * 保存对象到文件中,通过GZIP算法压缩<o:p></o:p>

     * @param fileName<o:p></o:p>

     * @param obje<st1:rtx>ct</st1:rtx><o:p></o:p>

     * @throws java.lang.Exception<o:p></o:p>

     */<o:p></o:p>

    public static void saveObje<st1:rtx>ct</st1:rtx>ToFile(String fileName, Serializable obje<st1:rtx>ct</st1:rtx>) throws Exception {<o:p></o:p>

        FileOutputStream fileStream = new FileOutputStream(fileName);<o:p></o:p>

        GZIPOutputStream gzipStream = new GZIPOutputStream(fileStream);<o:p></o:p>

        Obje<st1:rtx>ct</st1:rtx>OutputStream obje<st1:rtx>ct</st1:rtx>Steam = new Obje<st1:rtx>ct</st1:rtx>OutputStream(gzipStream);<o:p></o:p>

        obje<st1:rtx>ct</st1:rtx>Steam.writeObje<st1:rtx>ct</st1:rtx>(obje<st1:rtx>ct</st1:rtx>);<o:p></o:p>

        obje<st1:rtx>ct</st1:rtx>Steam.flush();<o:p></o:p>

        obje<st1:rtx>ct</st1:rtx>Steam.<st1:rtx>cl</st1:rtx>ose();<o:p></o:p>

        gzipStream.<st1:rtx>cl</st1:rtx>ose();<o:p></o:p>

        fileStream.<st1:rtx>cl</st1:rtx>ose();<o:p></o:p>

    }<o:p></o:p>

    /**<o:p></o:p>

     * 从文件中获取对象<o:p></o:p>

     * @param fileName<o:p></o:p>

     * @return<o:p></o:p>

     * @throws java.lang.Exception<o:p></o:p>

     */<o:p></o:p>

    public static Obje<st1:rtx>ct</st1:rtx> getObje<st1:rtx>ct</st1:rtx>FromFile(String fileName) throws Exception {<o:p></o:p>

        FileInputStream fileStream = new FileInputStream(fileName);<o:p></o:p>

        GZIPInputStream gzipStream = new GZIPInputStream(fileStream);<o:p></o:p>

        Obje<st1:rtx>ct</st1:rtx>InputStream obje<st1:rtx>ct</st1:rtx>Steam = new Obje<st1:rtx>ct</st1:rtx>InputStream(gzipStream);<o:p></o:p>

        Obje<st1:rtx>ct</st1:rtx> obje<st1:rtx>ct</st1:rtx> = obje<st1:rtx>ct</st1:rtx>Steam.readObje<st1:rtx>ct</st1:rtx>();<o:p></o:p>

        obje<st1:rtx>ct</st1:rtx>Steam.<st1:rtx>cl</st1:rtx>ose();<o:p></o:p>

        gzipStream.<st1:rtx>cl</st1:rtx>ose();<o:p></o:p>

        fileStream.<st1:rtx>cl</st1:rtx>ose();<o:p></o:p>

        return obje<st1:rtx>ct</st1:rtx>;<o:p></o:p>

    }<o:p></o:p>

}<o:p></o:p>

分享到:
评论

相关推荐

    Java GZIP使用的范例压缩解压文件.rar

    Java GZIP使用的范例压缩解压文件,主要是文件流的操作,写入缓冲数据到输出流。  public void zipFile&#40;String source,String target&#41;{ //压缩文件  public void unZipFile&#40;String source,String ...

    js压缩gzip格式

    在提供的压缩包中,"gzip使用说明"文档将详细解释如何安装gzip和实际操作步骤。它可能涵盖了在不同操作系统(如Linux、Windows和macOS)上安装gzip的方法,以及如何使用gzip命令行工具对文件进行压缩和解压缩。此外...

    gzip-1.3.9.tar

    gzip 是一个广泛使用的数据压缩工具,在 Unix 和类 Unix 系统(如 Linux、macOS)上非常常见。这个软件主要用于减小文件的大小,从而节省存储空间和提高数据传输效率。下面我们将深入探讨 gzip 工具及其 1.3.9 版本...

    gzip java ajax

    2. **启用HTTP缓存**:配合gzip使用HTTP缓存策略,如Last-Modified或ETag,可以进一步提高页面加载速度。 3. **压缩静态资源**:如CSS、JavaScript和图片等,可以预先进行gzip压缩,存储在服务器上,减少每次请求时...

    GZIP解压工具

    3. **gzip使用说明.txt**:这份文件包含了如何使用GZIP工具的基本指南,包括如何在命令行中执行压缩和解压缩操作,可能还会涵盖不同选项和参数的使用,例如保留原文件(`-n`),设置压缩级别(`-1`到`-9`,数字越大...

    Gzip Zlib PNG 压缩算法

    2. Huffman 编码的实现:Gzip 使用 Huffman 编码对 LZ77 算法的输出结果进行编码。 3. 压缩数据的输出:Gzip 将压缩后的数据输出到文件中。 PNG 压缩算法 PNG 图形格式使用 deflate 算法来压缩图形数据。PNG 压缩...

    Gzip

    Gzip 是一种广泛使用的数据压缩格式,主要应用于网络传输,以减少文件的大小,从而加快文件的下载速度。它的全名是 GNU zip,由 Jean-Loup Gailly 和 Mark Adler 开发,是 GNU 项目的一部分。Gzip 文件通常具有 .gz ...

    gzip.rar_C gzip源码_c语言gzip_gzip压缩_gzip解压_poetryfem

    gzip是Linux环境中广泛使用的文件压缩工具,其源代码主要由C语言编写。本文将深入探讨gzip的原理、C语言实现细节以及如何进行gzip压缩和解压缩。 首先,gzip基于著名的DEFLATE算法,该算法结合了LZ77(一种字典压缩...

    Nginx服务器中的GZip配置参数详解

    gzip使用环境:http,server,location,if(x),一般我把它定义在nginx.conf的http{…..}之间 gzip on;  开启gzip off关闭 gzip_min_length 1k; 设置允许压缩的页面最小字节(从header头的Content-Length中获取) 建议...

    红鸟GZIP v1.0.zip

    红鸟GZIP使用方法: 如果您的文件名是:abc.js;那么您只需要将文件名改为:hn_gzip.php?f=abc.js(请自行适配文件路径); 内置四种文件的mime:js、css、html、xml; 文档型文件压缩率高,建议使用;图片、...

    1-1Z914195953_gzip_

    1. **gzip工作原理**:gzip使用LZ77算法,这是一种基于查找重复字符串并替换为引用的压缩方法。它还包含CRC校验,以确保数据的完整性。 2. **命令行使用**:在Linux或Unix系统中,你可以使用`gzip`命令来压缩文件,...

    使用GZip解压文件

    GZip是一种广泛使用的压缩格式,尤其在Web服务器和网络传输中扮演着重要角色。本篇文章将详细探讨如何使用GZip来解压文件,以及相关的文件和文件流操作。 首先,GZip是一种基于DEFLATE算法的压缩格式,它不仅能够...

    gzip.zip需要压缩成gz格式

    - **高效压缩**:gzip使用LZ77压缩算法,可以有效地减少文件大小。 - **兼容性**:虽然gz格式主要在Unix/Linux系统中使用,但大多数现代压缩工具都能识别和解压gz文件,包括Windows环境。 - **单一文件**:gzip只能...

    gzip源码 (可离线安装gzip)

    gzip是Linux和Unix系统中广泛使用的数据压缩工具,它的全称是GNU zip。这个源码包"gzip源码 (可离线安装gzip)"提供了一种在没有网络连接的情况下安装gzip的可能性,这对于那些需要在隔离环境或者没有网络的服务器上...

    使用libcurl获取经过gzip压缩的网页文件

    本文将深入探讨如何使用libcurl获取并解压这些经过gzip压缩的网页文件。 首先,理解libcurl的基本工作原理。libcurl是一个C语言库,提供了一系列函数接口,用于在各种协议下传输数据。对于HTTP协议,libcurl可以...

    busybox中gzip命令简单实现

    busybox中gzip命令简单实现,可实现压缩存储,

    易语言源码易语言gzip解压缩模块源码.rar

    gzip使用DEFLATE算法,这是一种结合了LZ77和霍夫曼编码的混合压缩方法。 4. **处理CRC校验**:gzip文件尾部包含了一个校验和,用于验证解压缩后数据的完整性。解压缩模块需要计算解压后的数据的CRC,与文件中的校验...

    windows下使用的gzip文件

    压缩: gzip 要压缩的文件 解压缩: gzip -d 压缩文件 mysql压缩导出: mysqldump -u用户名 -p密码 要导出的库 [要导出的表] | gzip &gt; d:\导出文件名.gz mysql导入压缩文件: gzip -d 导出的压缩文件 | mysql -u...

    VC6 gzip 压缩解压 测试代码 使用gzip.dll

    在本文中,我们将深入探讨如何在Visual C++ 6(简称VC6)环境中使用gzip库进行数据的压缩和解压。gzip是一种广泛应用于网络数据传输的压缩格式,它基于Deflate算法,能够有效地减小文件大小,从而提高传输效率。...

    GZIP_gzip_

    GZIP是一种广泛使用的无损数据压缩算法,尤其在IT领域中扮演着重要角色。这个压缩格式基于DEFLATE算法,该算法结合了LZ77(Lempel-Ziv)编码和霍夫曼编码,旨在高效地减小文件大小,同时能够完全恢复原始数据。 ...

Global site tag (gtag.js) - Google Analytics