- 浏览: 4402918 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (163)
- 职场 && 心情 (22)
- Java/Basic (17)
- Java/Compression (7)
- Java/Security (20)
- Java/Maven (3)
- Java/Cache (11)
- Eclipse (4)
- Spring (19)
- ORM/Hibernate (2)
- ORM/iBatis (3)
- DB/NoSQL (11)
- DB/MySQL (7)
- DB/MS SQL Server (4)
- OS/Linux (11)
- OS/Mac (7)
- C/C++ (4)
- Server Architecture/Basic (13)
- Server Architecture/Distributed (17)
- Moblie/Andriod (2)
- WebService (3)
- Objective-C (1)
- Html (1)
- 设计模式 (1)
- Scala (0)
- Kafka (1)
最新评论
-
w47_csdn:
证书安装:在"浏览"选项中选择" ...
Java加密技术(九)——初探SSL -
w47_csdn:
spiritfrog 写道你好,我按照你的步骤,tomcat中 ...
Java加密技术(九)——初探SSL -
liuyachao111:
11楼说的对 用@ControllerAdvicepublic ...
Spring 注解学习手札(八)补遗——@ExceptionHandler -
irayslu:
作者你好, 我把你的源码放在jdk6, jdk7 中运行正常, ...
Java加密技术(五)——非对称加密算法的由来DH -
夏季浅忆-卖小子:
为什么不能解压rar格式的压缩包呢
Java压缩技术(三) ZIP解压缩——Java原生实现
趁着头脑清楚,抓紧时间继续整理!
熟悉linux的朋友可能都用过文件压缩命令,譬如最为简单的gzip命令。
相关链接:
Java压缩技术(一) ZLib
Java压缩技术(二) ZIP压缩——Java原生实现
Java压缩技术(三) ZIP解压缩——Java原生实现
Java压缩技术(四) GZIP——Java原生实现
Java压缩技术(五) GZIP相关——浏览器解析
Java压缩技术(六) BZIP2——Commons实现
Java压缩技术(七) TAR——Commons实现
GZIP常常用在linxu环境下,是一种非常简单的压缩算法。在Java实现API中,它仅仅包含两个实现类:GZIPInputStream和GZIPOutputStream。
GZIPOutputStream类用于压缩
GZIPInputStream类用于解压缩
先说压缩实现,GZIPOutputStream只有一个方法用于压缩,就是带定长的write方法。简单调用如下文所示:
记得完成操作后,调用finish方法和flush方法!
核心的压缩实现就这么多!
对于解压缩,GZIPInputStream也对应GZIPOutputStream提供了一个带定长的read方法。简单调用如下文所示:
就这么简单! 核心内容完毕!
顺便补充一下,在liunx下操作gzip命令
gzip file用于压缩,如gzip a.txt将得到文件a.txt.gz,同时删除文件a.txt!。
gzip -d file.gz用于解压缩,如gzip -d a.txt.gz将得到文件a.txt,同时删除文件a.txt.gz!。
根据这些特性,我补充了相应的文件操作实现,详见下文!
完整实现:
罗嗦了半天,到底行不行?
来个测试用例,测试用例如下所示:
结果如何?
先看testDataCompress()方法控制台输出结果。
控制台输出如下:
原文: zlex@zlex.org,snowolf@zlex.org,zlex.snowolf@zlex.org
长度: 52
压缩后:
长度: 45
解压缩后: zlex@zlex.org,snowolf@zlex.org,zlex.snowolf@zlex.org
长度: 52
这里使用英文字符做测试,当输入字符串的字节数大于50左右时,压缩效果明显;如果这里使用中文压缩,可能当压缩上千字节时方能体现出压缩效果!
对于文件操作,朋友们可以自行实验,我代码里的实现是按照gzip命令来的!
举例来说:
压缩时,将文件a.txt压缩为a.txt.gz,同时删除文件a.txt。
解压缩时,将文件a.txt.gz解压缩为a.txt,同时删除文件a.txt.gz。
注意执行testFileCompress方法,查看产生的文件! 你大可以放到linux上去做验证!
commons也提供了GZIP算法的实现,甚至更多种压缩算法(tar、bzip2等)的实现,有机会我将继续整理!
相关链接:
Java压缩技术(一) ZLib
Java压缩技术(二) ZIP压缩——Java原生实现
Java压缩技术(三) ZIP解压缩——Java原生实现
Java压缩技术(四) GZIP——Java原生实现
Java压缩技术(五) GZIP相关——浏览器解析
Java压缩技术(六) BZIP2——Commons实现
Java压缩技术(七) TAR——Commons实现
JNI实现,效率也难说!我只是整体整理,对各个算法尚无深度研究!
首先说压力,如果文件/数据超级大,那么不管是压缩,还是解压缩都是很大的。一般情况的操作不至于造成多大的压力。至于这一点,鱼与熊掌不可兼得,只要把握好一个量度即可!
再说IE,IE的确有这个问题,广泛的来说兼容性成问题。抽空我试试看,看看是不是在其他浏览器中也如此!
谢谢 :)
稍后,我补充一个使用gzip构建的网络流,IE的确是不支持的! FireFox、Opera都能够很好的支持!
兄弟,看这里http://snowolf.iteye.com/blog/643443!
首先说压力,如果文件/数据超级大,那么不管是压缩,还是解压缩都是很大的。一般情况的操作不至于造成多大的压力。至于这一点,鱼与熊掌不可兼得,只要把握好一个量度即可!
再说IE,IE的确有这个问题,广泛的来说兼容性成问题。抽空我试试看,看看是不是在其他浏览器中也如此!
谢谢 :)
稍后,我补充一个使用gzip构建的网络流,IE的确是不支持的! FireFox、Opera都能够很好的支持!
首先说压力,如果文件/数据超级大,那么不管是压缩,还是解压缩都是很大的。一般情况的操作不至于造成多大的压力。至于这一点,鱼与熊掌不可兼得,只要把握好一个量度即可!
再说IE,IE的确有这个问题,广泛的来说兼容性成问题。抽空我试试看,看看是不是在其他浏览器中也如此!
谢谢 :)
首先说压力,如果文件/数据超级大,那么不管是压缩,还是解压缩都是很大的。一般情况的操作不至于造成多大的压力。至于这一点,鱼与熊掌不可兼得,只要把握好一个量度即可!
再说IE,IE的确有这个问题,广泛的来说兼容性成问题。抽空我试试看,看看是不是在其他浏览器中也如此!
熟悉linux的朋友可能都用过文件压缩命令,譬如最为简单的gzip命令。
相关链接:
Java压缩技术(一) ZLib
Java压缩技术(二) ZIP压缩——Java原生实现
Java压缩技术(三) ZIP解压缩——Java原生实现
Java压缩技术(四) GZIP——Java原生实现
Java压缩技术(五) GZIP相关——浏览器解析
Java压缩技术(六) BZIP2——Commons实现
Java压缩技术(七) TAR——Commons实现
GZIP常常用在linxu环境下,是一种非常简单的压缩算法。在Java实现API中,它仅仅包含两个实现类:GZIPInputStream和GZIPOutputStream。
GZIPOutputStream类用于压缩
GZIPInputStream类用于解压缩
先说压缩实现,GZIPOutputStream只有一个方法用于压缩,就是带定长的write方法。简单调用如下文所示:
/** * 数据压缩 * * @param is * @param os * @throws Exception */ public static void compress(InputStream is, OutputStream os) throws Exception { GZIPOutputStream gos = new GZIPOutputStream(os); int count; byte data[] = new byte[BUFFER]; while ((count = is.read(data, 0, BUFFER)) != -1) { gos.write(data, 0, count); } gos.finish(); gos.flush(); gos.close(); }
记得完成操作后,调用finish方法和flush方法!
核心的压缩实现就这么多!
对于解压缩,GZIPInputStream也对应GZIPOutputStream提供了一个带定长的read方法。简单调用如下文所示:
/** * 数据解压缩 * * @param is * @param os * @throws Exception */ public static void decompress(InputStream is, OutputStream os) throws Exception { GZIPInputStream gis = new GZIPInputStream(is); int count; byte data[] = new byte[BUFFER]; while ((count = gis.read(data, 0, BUFFER)) != -1) { os.write(data, 0, count); } gis.close(); }
就这么简单! 核心内容完毕!
顺便补充一下,在liunx下操作gzip命令
gzip file用于压缩,如gzip a.txt将得到文件a.txt.gz,同时删除文件a.txt!。
gzip -d file.gz用于解压缩,如gzip -d a.txt.gz将得到文件a.txt,同时删除文件a.txt.gz!。
根据这些特性,我补充了相应的文件操作实现,详见下文!
完整实现:
/** * 2010-4-13 */ package org.zlex.commons.io; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; /** * GZIP工具 * * @author <a href="mailto:zlex.dongliang@gmail.com">梁栋</a> * @since 1.0 */ public abstract class GZipUtils { public static final int BUFFER = 1024; public static final String EXT = ".gz"; /** * 数据压缩 * * @param data * @return * @throws Exception */ public static byte[] compress(byte[] data) throws Exception { ByteArrayInputStream bais = new ByteArrayInputStream(data); ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 压缩 compress(bais, baos); byte[] output = baos.toByteArray(); baos.flush(); baos.close(); bais.close(); return output; } /** * 文件压缩 * * @param file * @throws Exception */ public static void compress(File file) throws Exception { compress(file, true); } /** * 文件压缩 * * @param file * @param delete * 是否删除原始文件 * @throws Exception */ public static void compress(File file, boolean delete) throws Exception { FileInputStream fis = new FileInputStream(file); FileOutputStream fos = new FileOutputStream(file.getPath() + EXT); compress(fis, fos); fis.close(); fos.flush(); fos.close(); if (delete) { file.delete(); } } /** * 数据压缩 * * @param is * @param os * @throws Exception */ public static void compress(InputStream is, OutputStream os) throws Exception { GZIPOutputStream gos = new GZIPOutputStream(os); int count; byte data[] = new byte[BUFFER]; while ((count = is.read(data, 0, BUFFER)) != -1) { gos.write(data, 0, count); } gos.finish(); gos.flush(); gos.close(); } /** * 文件压缩 * * @param path * @throws Exception */ public static void compress(String path) throws Exception { compress(path, true); } /** * 文件压缩 * * @param path * @param delete * 是否删除原始文件 * @throws Exception */ public static void compress(String path, boolean delete) throws Exception { File file = new File(path); compress(file, delete); } /** * 数据解压缩 * * @param data * @return * @throws Exception */ public static byte[] decompress(byte[] data) throws Exception { ByteArrayInputStream bais = new ByteArrayInputStream(data); ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 解压缩 decompress(bais, baos); data = baos.toByteArray(); baos.flush(); baos.close(); bais.close(); return data; } /** * 文件解压缩 * * @param file * @throws Exception */ public static void decompress(File file) throws Exception { decompress(file, true); } /** * 文件解压缩 * * @param file * @param delete * 是否删除原始文件 * @throws Exception */ public static void decompress(File file, boolean delete) throws Exception { FileInputStream fis = new FileInputStream(file); FileOutputStream fos = new FileOutputStream(file.getPath().replace(EXT, "")); decompress(fis, fos); fis.close(); fos.flush(); fos.close(); if (delete) { file.delete(); } } /** * 数据解压缩 * * @param is * @param os * @throws Exception */ public static void decompress(InputStream is, OutputStream os) throws Exception { GZIPInputStream gis = new GZIPInputStream(is); int count; byte data[] = new byte[BUFFER]; while ((count = gis.read(data, 0, BUFFER)) != -1) { os.write(data, 0, count); } gis.close(); } /** * 文件解压缩 * * @param path * @throws Exception */ public static void decompress(String path) throws Exception { decompress(path, true); } /** * 文件解压缩 * * @param path * @param delete * 是否删除原始文件 * @throws Exception */ public static void decompress(String path, boolean delete) throws Exception { File file = new File(path); decompress(file, delete); } }
罗嗦了半天,到底行不行?
来个测试用例,测试用例如下所示:
/** * 2010-4-13 */ package org.zlex.commons.compress.compress; import static org.junit.Assert.assertEquals; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import org.junit.Test; /** * @author <a href="mailto:zlex.dongliang@gmail.com">梁栋</a> * @since 1.0 */ public class GZipUtilsTest { private String inputStr = "zlex@zlex.org,snowolf@zlex.org,zlex.snowolf@zlex.org"; @Test public final void testDataCompress() throws Exception { System.err.println("原文:\t" + inputStr); byte[] input = inputStr.getBytes(); System.err.println("长度:\t" + input.length); byte[] data = GZipUtils.compress(input); System.err.println("压缩后:\t"); System.err.println("长度:\t" + data.length); byte[] output = GZipUtils.decompress(data); String outputStr = new String(output); System.err.println("解压缩后:\t" + outputStr); System.err.println("长度:\t" + output.length); assertEquals(inputStr, outputStr); } @Test public final void testFileCompress() throws Exception { FileOutputStream fos = new FileOutputStream("d:/f.txt"); fos.write(inputStr.getBytes()); fos.flush(); fos.close(); GZipUtils.compress("d:/f.txt", false); GZipUtils.decompress("d:/f.txt.gz", false); File file = new File("d:/f.txt"); FileInputStream fis = new FileInputStream(file); DataInputStream dis = new DataInputStream(fis); byte[] data = new byte[(int) file.length()]; dis.readFully(data); fis.close(); String outputStr = new String(data); assertEquals(inputStr, outputStr); } }
结果如何?
先看testDataCompress()方法控制台输出结果。
控制台输出如下:
引用
原文: zlex@zlex.org,snowolf@zlex.org,zlex.snowolf@zlex.org
长度: 52
压缩后:
长度: 45
解压缩后: zlex@zlex.org,snowolf@zlex.org,zlex.snowolf@zlex.org
长度: 52
这里使用英文字符做测试,当输入字符串的字节数大于50左右时,压缩效果明显;如果这里使用中文压缩,可能当压缩上千字节时方能体现出压缩效果!
对于文件操作,朋友们可以自行实验,我代码里的实现是按照gzip命令来的!
举例来说:
压缩时,将文件a.txt压缩为a.txt.gz,同时删除文件a.txt。
解压缩时,将文件a.txt.gz解压缩为a.txt,同时删除文件a.txt.gz。
注意执行testFileCompress方法,查看产生的文件! 你大可以放到linux上去做验证!
commons也提供了GZIP算法的实现,甚至更多种压缩算法(tar、bzip2等)的实现,有机会我将继续整理!
相关链接:
Java压缩技术(一) ZLib
Java压缩技术(二) ZIP压缩——Java原生实现
Java压缩技术(三) ZIP解压缩——Java原生实现
Java压缩技术(四) GZIP——Java原生实现
Java压缩技术(五) GZIP相关——浏览器解析
Java压缩技术(六) BZIP2——Commons实现
Java压缩技术(七) TAR——Commons实现
- gzip.rar (1.5 KB)
- 下载次数: 523
评论
11 楼
Horse_Chasing
2016-12-28
垃圾代码垃圾代码
10 楼
ustcstj
2014-07-09
博主你好,我将你的代码稍微修改后放到安卓平台上运行,针对下面这个语句出现一个问题
byte[] data = GZipUtils.compress(input);
System.err.println("压缩后:\t");
System.err.println("长度:\t" + data.length);
我将println换成了log.i("tag1","String.valueof(data.length)");
在data.length这里出错,eclipse说data没有length变量,希望博主解惑
byte[] data = GZipUtils.compress(input);
System.err.println("压缩后:\t");
System.err.println("长度:\t" + data.length);
我将println换成了log.i("tag1","String.valueof(data.length)");
在data.length这里出错,eclipse说data没有length变量,希望博主解惑
9 楼
Alicus520
2010-11-05
谢谢了!!
8 楼
snowolf
2010-09-26
forchenyun 写道
hi,我目前需要极高效的压缩,对Java自己的gzip实现不是很放心。
gzip据说有c写的代码,Java本地调用,不知道博主有研究吗?
gzip据说有c写的代码,Java本地调用,不知道博主有研究吗?
JNI实现,效率也难说!我只是整体整理,对各个算法尚无深度研究!
7 楼
forchenyun
2010-09-26
hi,我目前需要极高效的压缩,对Java自己的gzip实现不是很放心。
gzip据说有c写的代码,Java本地调用,不知道博主有研究吗?
gzip据说有c写的代码,Java本地调用,不知道博主有研究吗?
6 楼
snowolf
2010-04-14
snowolf 写道
iamzealotwang 写道
snowolf 写道
iamzealotwang 写道
你好 我有一个问题想请教一下
我是一名前端工程师,有关GZip这种东西不是很懂,不过我有一个需求
前端需要从后端load一份xml文件 之前的做法都是我自己用zip压缩xml文件然后再从后端load过来解压。不过后端的同事和我说 不用那么麻烦,说xml在http传输的时候直接被gzip压缩了。
我想问一下 这样做对后端的压力大么? 还有就是听说这种方式对ie6 ie7的支持不好 有这回事么? 谢谢。
我是一名前端工程师,有关GZip这种东西不是很懂,不过我有一个需求
前端需要从后端load一份xml文件 之前的做法都是我自己用zip压缩xml文件然后再从后端load过来解压。不过后端的同事和我说 不用那么麻烦,说xml在http传输的时候直接被gzip压缩了。
我想问一下 这样做对后端的压力大么? 还有就是听说这种方式对ie6 ie7的支持不好 有这回事么? 谢谢。
首先说压力,如果文件/数据超级大,那么不管是压缩,还是解压缩都是很大的。一般情况的操作不至于造成多大的压力。至于这一点,鱼与熊掌不可兼得,只要把握好一个量度即可!
再说IE,IE的确有这个问题,广泛的来说兼容性成问题。抽空我试试看,看看是不是在其他浏览器中也如此!
谢谢 :)
稍后,我补充一个使用gzip构建的网络流,IE的确是不支持的! FireFox、Opera都能够很好的支持!
兄弟,看这里http://snowolf.iteye.com/blog/643443!
5 楼
snowolf
2010-04-14
iamzealotwang 写道
snowolf 写道
iamzealotwang 写道
你好 我有一个问题想请教一下
我是一名前端工程师,有关GZip这种东西不是很懂,不过我有一个需求
前端需要从后端load一份xml文件 之前的做法都是我自己用zip压缩xml文件然后再从后端load过来解压。不过后端的同事和我说 不用那么麻烦,说xml在http传输的时候直接被gzip压缩了。
我想问一下 这样做对后端的压力大么? 还有就是听说这种方式对ie6 ie7的支持不好 有这回事么? 谢谢。
我是一名前端工程师,有关GZip这种东西不是很懂,不过我有一个需求
前端需要从后端load一份xml文件 之前的做法都是我自己用zip压缩xml文件然后再从后端load过来解压。不过后端的同事和我说 不用那么麻烦,说xml在http传输的时候直接被gzip压缩了。
我想问一下 这样做对后端的压力大么? 还有就是听说这种方式对ie6 ie7的支持不好 有这回事么? 谢谢。
首先说压力,如果文件/数据超级大,那么不管是压缩,还是解压缩都是很大的。一般情况的操作不至于造成多大的压力。至于这一点,鱼与熊掌不可兼得,只要把握好一个量度即可!
再说IE,IE的确有这个问题,广泛的来说兼容性成问题。抽空我试试看,看看是不是在其他浏览器中也如此!
谢谢 :)
稍后,我补充一个使用gzip构建的网络流,IE的确是不支持的! FireFox、Opera都能够很好的支持!
4 楼
iamzealotwang
2010-04-14
snowolf 写道
iamzealotwang 写道
你好 我有一个问题想请教一下
我是一名前端工程师,有关GZip这种东西不是很懂,不过我有一个需求
前端需要从后端load一份xml文件 之前的做法都是我自己用zip压缩xml文件然后再从后端load过来解压。不过后端的同事和我说 不用那么麻烦,说xml在http传输的时候直接被gzip压缩了。
我想问一下 这样做对后端的压力大么? 还有就是听说这种方式对ie6 ie7的支持不好 有这回事么? 谢谢。
我是一名前端工程师,有关GZip这种东西不是很懂,不过我有一个需求
前端需要从后端load一份xml文件 之前的做法都是我自己用zip压缩xml文件然后再从后端load过来解压。不过后端的同事和我说 不用那么麻烦,说xml在http传输的时候直接被gzip压缩了。
我想问一下 这样做对后端的压力大么? 还有就是听说这种方式对ie6 ie7的支持不好 有这回事么? 谢谢。
首先说压力,如果文件/数据超级大,那么不管是压缩,还是解压缩都是很大的。一般情况的操作不至于造成多大的压力。至于这一点,鱼与熊掌不可兼得,只要把握好一个量度即可!
再说IE,IE的确有这个问题,广泛的来说兼容性成问题。抽空我试试看,看看是不是在其他浏览器中也如此!
谢谢 :)
3 楼
qianhd
2010-04-14
除了不支持加密解密什么都好
2 楼
snowolf
2010-04-14
iamzealotwang 写道
你好 我有一个问题想请教一下
我是一名前端工程师,有关GZip这种东西不是很懂,不过我有一个需求
前端需要从后端load一份xml文件 之前的做法都是我自己用zip压缩xml文件然后再从后端load过来解压。不过后端的同事和我说 不用那么麻烦,说xml在http传输的时候直接被gzip压缩了。
我想问一下 这样做对后端的压力大么? 还有就是听说这种方式对ie6 ie7的支持不好 有这回事么? 谢谢。
我是一名前端工程师,有关GZip这种东西不是很懂,不过我有一个需求
前端需要从后端load一份xml文件 之前的做法都是我自己用zip压缩xml文件然后再从后端load过来解压。不过后端的同事和我说 不用那么麻烦,说xml在http传输的时候直接被gzip压缩了。
我想问一下 这样做对后端的压力大么? 还有就是听说这种方式对ie6 ie7的支持不好 有这回事么? 谢谢。
首先说压力,如果文件/数据超级大,那么不管是压缩,还是解压缩都是很大的。一般情况的操作不至于造成多大的压力。至于这一点,鱼与熊掌不可兼得,只要把握好一个量度即可!
再说IE,IE的确有这个问题,广泛的来说兼容性成问题。抽空我试试看,看看是不是在其他浏览器中也如此!
1 楼
iamzealotwang
2010-04-13
你好 我有一个问题想请教一下
我是一名前端工程师,有关GZip这种东西不是很懂,不过我有一个需求
前端需要从后端load一份xml文件 之前的做法都是我自己用zip压缩xml文件然后再从后端load过来解压。不过后端的同事和我说 不用那么麻烦,说xml在http传输的时候直接被gzip压缩了。
我想问一下 这样做对后端的压力大么? 还有就是听说这种方式对ie6 ie7的支持不好 有这回事么? 谢谢。
我是一名前端工程师,有关GZip这种东西不是很懂,不过我有一个需求
前端需要从后端load一份xml文件 之前的做法都是我自己用zip压缩xml文件然后再从后端load过来解压。不过后端的同事和我说 不用那么麻烦,说xml在http传输的时候直接被gzip压缩了。
我想问一下 这样做对后端的压力大么? 还有就是听说这种方式对ie6 ie7的支持不好 有这回事么? 谢谢。
发表评论
-
Java压缩技术(七) TAR——Commons实现
2010-04-20 18:04 36636在linux下,tar是一个归档命令。当然,如果配合gzip、 ... -
Java压缩技术(六) BZIP2——Commons实现
2010-04-15 14:47 22540想要把一整套算法都整理出来,的确是件非常老心费力的事情! 但是 ... -
Java压缩技术(五) GZIP相关——浏览器解析
2010-04-14 10:36 24754昨天一篇GZIP相关实现引起大家的广泛关注,为一位朋友验证一下 ... -
Java压缩技术(三) ZIP解压缩——Java原生实现
2010-04-13 10:20 34422JavaEye的朋友跟我说:“你一口气把ZIP压缩和解压缩都写 ... -
Java压缩技术(二) ZIP压缩——Java原生实现
2010-04-13 00:02 61030去年整理了一篇ZLib算法Java实现(Java压缩技术(一) ... -
Java压缩技术(一) ZLib
2009-09-09 13:09 62205应好友需要,整理一下Java的压缩算法,先从ZLib开始。 ...
相关推荐
ZLib ZIP 压缩——Java 原生实现 ZIP 解压缩——Java 原生实现 GZIP——Java 原生实现 GZIP 相关——浏览器解析 BZIP2——Commons 实现 TAR——Commons 实现
总之,Java的GZIP压缩技术在Web开发中扮演着重要角色,能够有效地减小数据传输量,提升用户体验。通过理解和应用这些知识,开发者可以构建更高效、更快速的网络服务。同时,深入源码有助于我们掌握更底层的细节,为...
Java作为后端开发的重要语言,支持处理gzip压缩,而Ajax(Asynchronous JavaScript and XML)则是前端进行异步数据交互的技术。本文将深入探讨如何在Java后端实现对gzip压缩的处理,以便于Ajax请求能够正确地进行...
在Java编程中,压缩技术是数据存储和传输中不可或缺的一部分。本篇主要关注的是TAR格式的压缩,它是Unix/Linux环境中广泛使用的文件打包格式。在Java中,Apache Commons Compress库提供了一个方便的API来处理TAR文件...
在本文中,我们将深入探讨如何使用Java实现GZIP压缩和解压缩文件的源码。 首先,我们需要引入Java的`java.util.zip`包,这个包包含了处理GZIP和其他压缩格式所需的类。在Java中,`GZIPOutputStream`和`...
首先,让我们了解`java.util.zip`包,它是Java标准库中用于处理ZIP和GZIP格式的压缩的工具。`ZipOutputStream`和`ZipEntry`是这个包中的关键类,它们用于创建和管理ZIP文件。 1. **ZipOutputStream**: - `...
在Java编程语言中,内置了多种压缩和解压缩的方式,如Gzip和Zip。这篇博客“java自带压缩方式的性能比较”可能详细分析了这两种压缩方法的效率和应用场景。通过提供的代码文件`CompressTestMain.java`、`GzipUtils....
在Java编程环境中,GZIP是一种常用的文件压缩格式,它基于DEFLATE算法,可以有效地减少文件大小,便于存储和传输。本篇文章将深入探讨如何在Java中使用GZIP进行文件的压缩与解压缩操作。 首先,我们需要了解Java中...
1. **Java压缩库**:Java标准库提供了`java.util.zip`包,它包含了多种压缩和解压缩的类,如`ZipOutputStream`、`ZipInputStream`、`GZIPOutputStream`和`GZIPInputStream`,用于处理ZIP和GZIP格式的文件。...
java,JAVA源码Java用GZIP压缩解压文件JAVA源码Java用GZIP压缩解压文件
GZIP是一种广泛使用的数据压缩格式,其在Java中的实现基于Java IO和Java util.zip库。本篇将详细介绍Java中如何利用GZIP进行数据压缩和解压缩,并结合`java_gzip.txt`和`www.pudn.com.txt`这两个文件来展示实际操作...
为了解决这个问题,可以采用数据压缩技术,如gzip,配合JavaScript库pako.js来压缩数据,然后再通过Ajax发送。以下将详细讲解如何利用ajax和pako.js实现gzip数据压缩上传。 首先,理解gzip压缩原理。gzip是一种广泛...
一个Java随书实例:用GZIP压缩解压文件,从源文件得到文件输入流,得到目标文件输出流,得到压缩输出流,设定读入缓冲区尺寸,弹出文件选择器,并判断是否点击了打开按钮,判断事件来自于哪个按钮,用于选择解压和...
在Java编程环境中,我们可以利用LZW算法实现文件的压缩和解压缩功能。以下是对LZW算法及其Java实现的详细解释: 1. **LZW算法原理**: LZW算法基于词典编码思想,它通过查找或构建一个动态更新的词典来压缩数据。...
总之,Java提供了一套完整的API来处理文件的压缩和解压缩,无论是基础的ZIP和GZIP,还是通过第三方库实现的更多压缩格式。在实际开发中,了解并掌握这些工具和技巧对于优化文件存储和传输效率至关重要。
理解gzip的C语言实现不仅有助于深入学习文件压缩技术,还能帮助开发者提高处理二进制数据和低级别I/O操作的能力。同时,这对于那些想要自定义压缩算法或在嵌入式系统上实现轻量级压缩的开发者来说尤其有价值。通过对...
本文将深入探讨如何使用Java实现这一功能,主要关注两种常用的压缩格式:ZIP和GZ。 首先,我们要引入Java的内置库`java.util.zip`,它提供了处理ZIP和GZIP格式的类。对于ZIP格式,我们主要使用`ZipOutputStream`来...