- 浏览: 409235 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (325)
- 神经网络 (1)
- javascript (11)
- 数据结构 (2)
- 计算机图形学 (11)
- 模式识别 (1)
- 前端开发 (14)
- 机器学习 (11)
- ios开发 (50)
- Python (9)
- HTML5 (4)
- 计算机视觉 (9)
- 数字图像处理 (7)
- 架构设计 (19)
- 数据库设计 (9)
- 算法设计 (59)
- Java (37)
- 其他 (3)
- 游戏开发 (5)
- c++ (17)
- Linux (3)
- TCP/IP (2)
- Flex (41)
- 健康 (6)
- AI (2)
- 工具 (1)
- 数据挖掘 (1)
- 性能优化 (6)
- 综合 (2)
- 网络通信 (12)
- Android (2)
- UML (3)
- 软件设计 (11)
- 编程经验 (7)
- J2EE (1)
- 多媒体技术 (3)
- 数学 (7)
- php (4)
- 设计 (1)
- CS (2)
- 计算机理论 (1)
- 信息安全 (1)
最新评论
-
ahead_zhan:
good good good
flex3控件_ModuleLoader -
lonerzf:
好样的。非常感谢楼主
OpenCV视频教程整理 -
lonerzf:
好样的。谢谢~
OpenCV视频教程整理 -
coding1688:
博主说的不错,我在实现瀑布流布局时也用的masonry插件,有 ...
Javascript 瀑布流式布局及其动态效果的实现 -
snowolf:
除非玩游戏,不然没啥win的事情,或者用win的银行客户端,通 ...
macbook安装操作系统的机理分析
参考:http://www.blogjava.net/usherlight/archive/2007/09/26/148230.html
网上介绍使用zipInStream和zipOutStream对文件或者文件夹进行压缩和解压缩的文章比较多。
但是这次项目中需要对byte[]进行压缩,然后decode,通过http发送到服务端。
最简单的方法,当然是把byte[]写到文件里,然后根据网上已有的文章,生成fileInputStream,构造zipInStream。
但是这个做法有着明显的问题,需要操作IO,在效率上不可取。
下面是利用ByteArrayOutStream来完成压缩和解压缩的代码。
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->
/**
* Answer a byte array compressed in the Zip format from bytes.
*
* @param bytes
* a byte array
* @param aName
* a String the represents a file name
* @return byte[] compressed bytes
* @throws IOException
*/
public static byte[] zipBytes(byte[] bytes) throws IOException {
ByteArrayOutputStream tempOStream = null;
BufferedOutputStream tempBOStream = null;
ZipOutputStream tempZStream = null;
ZipEntry tempEntry = null;
byte[] tempBytes = null;
tempOStream = new ByteArrayOutputStream(bytes.length);
tempBOStream = new BufferedOutputStream(tempOStream);
tempZStream = new ZipOutputStream(tempBOStream);
tempEntry = new ZipEntry(String.valueOf(bytes.length));
tempEntry.setMethod(ZipEntry.DEFLATED);
tempEntry.setSize((long) bytes.length);
tempZStream.putNextEntry(tempEntry);
tempZStream.write(bytes, 0, bytes.length);
tempZStream.flush();
tempBOStream.flush();
tempOStream.flush();
tempZStream.close();
tempBytes = tempOStream.toByteArray();
tempOStream.close();
tempBOStream.close();
return tempBytes;
}
/**
* Answer a byte array that has been decompressed from the Zip format.
*
* @param bytes
* a byte array of compressed bytes
* @return byte[] uncompressed bytes
* @throws IOException
*/
public static void unzipBytes(byte[] bytes, OutputStream os) throws IOException {
ByteArrayInputStream tempIStream = null;
BufferedInputStream tempBIStream = null;
ZipInputStream tempZIStream = null;
ZipEntry tempEntry = null;
long tempDecompressedSize = -1;
byte[] tempUncompressedBuf = null;
tempIStream = new ByteArrayInputStream(bytes, 0, bytes.length);
tempBIStream = new BufferedInputStream(tempIStream);
tempZIStream = new ZipInputStream(tempBIStream);
tempEntry = tempZIStream.getNextEntry();
if (tempEntry != null) {
tempDecompressedSize = tempEntry.getCompressedSize();
if (tempDecompressedSize < 0) {
tempDecompressedSize = Long.parseLong(tempEntry.getName());
}
int size = (int)tempDecompressedSize;
tempUncompressedBuf = new byte[size];
int num = 0, count = 0;
while ( true ) {
count = tempZIStream.read(tempUncompressedBuf, 0, size - num );
num += count;
os.write( tempUncompressedBuf, 0, count );
os.flush();
if ( num >= size ) break;
}
}
tempZIStream.close();
}
/**
* Answer a byte array compressed in the Zip format from bytes.
*
* @param bytes
* a byte array
* @param aName
* a String the represents a file name
* @return byte[] compressed bytes
* @throws IOException
*/
public static byte[] zipBytes(byte[] bytes) throws IOException {
ByteArrayOutputStream tempOStream = null;
BufferedOutputStream tempBOStream = null;
ZipOutputStream tempZStream = null;
ZipEntry tempEntry = null;
byte[] tempBytes = null;
tempOStream = new ByteArrayOutputStream(bytes.length);
tempBOStream = new BufferedOutputStream(tempOStream);
tempZStream = new ZipOutputStream(tempBOStream);
tempEntry = new ZipEntry(String.valueOf(bytes.length));
tempEntry.setMethod(ZipEntry.DEFLATED);
tempEntry.setSize((long) bytes.length);
tempZStream.putNextEntry(tempEntry);
tempZStream.write(bytes, 0, bytes.length);
tempZStream.flush();
tempBOStream.flush();
tempOStream.flush();
tempZStream.close();
tempBytes = tempOStream.toByteArray();
tempOStream.close();
tempBOStream.close();
return tempBytes;
}
/**
* Answer a byte array that has been decompressed from the Zip format.
*
* @param bytes
* a byte array of compressed bytes
* @return byte[] uncompressed bytes
* @throws IOException
*/
public static void unzipBytes(byte[] bytes, OutputStream os) throws IOException {
ByteArrayInputStream tempIStream = null;
BufferedInputStream tempBIStream = null;
ZipInputStream tempZIStream = null;
ZipEntry tempEntry = null;
long tempDecompressedSize = -1;
byte[] tempUncompressedBuf = null;
tempIStream = new ByteArrayInputStream(bytes, 0, bytes.length);
tempBIStream = new BufferedInputStream(tempIStream);
tempZIStream = new ZipInputStream(tempBIStream);
tempEntry = tempZIStream.getNextEntry();
if (tempEntry != null) {
tempDecompressedSize = tempEntry.getCompressedSize();
if (tempDecompressedSize < 0) {
tempDecompressedSize = Long.parseLong(tempEntry.getName());
}
int size = (int)tempDecompressedSize;
tempUncompressedBuf = new byte[size];
int num = 0, count = 0;
while ( true ) {
count = tempZIStream.read(tempUncompressedBuf, 0, size - num );
num += count;
os.write( tempUncompressedBuf, 0, count );
os.flush();
if ( num >= size ) break;
}
}
tempZIStream.close();
}
发表评论
-
多种加密算法实现(JAVA)
2013-10-24 09:18 1623有短句“Sun Yat-sen University is ... -
断点续传的原理
2013-05-07 19:53 833转自:http://www.ibm.com/develope ... -
《JAVA与模式》之调停者模式
2012-06-21 20:06 640参考:http://www.cnblo ... -
Java 线程池的原理与实现
2011-10-23 15:48 697参考: http://www.blogjava.ne ... -
Java中读取字节流并按指定编码转换成字符串的方法
2011-05-21 11:22 1454参考: http://www.blogjava.net/pen ... -
字节流编码获取原来这么复杂,但也很简单
2011-05-21 11:02 1504参考:http://www.cnblogs ... -
ActionScript与Java类型对应表
2011-05-21 09:46 1032当你使用AMF格式进行RemoteObject 调用时,肯定会 ... -
基于red5的在线视频录制实例和详细注释
2011-05-14 23:03 1579参考:http://www.ccvita.com/130.ht ... -
Java 中几种查找算法
2011-05-12 10:31 1467顺序查找说明:顺序查找适合于存储结构为顺序存储或链接存储的线性 ... -
Converting data from Java to ActionScript
2011-05-07 14:23 988On the client side, the ide ... -
java大整数相加及相乘
2011-05-04 18:34 1490import java.io.BufferedInputStr ... -
.org.hibernate.ObjectNotFoundException: No row with the given identifier exists
2011-04-20 18:09 1152说到底,就是外键关联引起的问题。 问题产生原因:有一个 ... -
java.util.ConcurrentModificationException
2011-04-19 10:07 576一般来说这个异常是容器类在遍历的时候被修改时抛出的。比 ... -
Spring+Hibernate+Flex,update、delete操作无法持久到数据库的解决办法
2011-04-17 21:42 1417这个解决办法就是才有事务机制了。。。 我是spring ... -
hibernate 注解 一对多 唯一索引
2011-04-17 02:00 2830今天被hibernate和mysql整了一下,切身感受到索引的 ... -
精通Hibernate——映射一对多关联关系
2011-04-17 01:38 1020在域模型(实体域)中,关联关系是类与类之间最普遍的关系。根据U ... -
junit实现opensessionInView保持session
2011-04-11 10:00 830参考:http://allenwei.iteye.com/bl ... -
Hibernate中cascade与inverse属性详解
2011-04-07 10:57 1053原文: 忘记存了..... ... -
HIbernate注解
2011-04-07 10:37 903Hibernate注解 文章分类:Web前端 @o ... -
Flex 通过Blazeds上传文件
2011-03-30 21:59 957本文讲的是通过Blazeds实现Flex文件上传,关于Blaz ...
相关推荐
### 使用 Java.util.zip 包实现数据压缩与解压 在计算机科学领域,数据压缩技术是一项重要的功能,它能够帮助减少存储空间的需求以及提高网络传输效率。本文将通过一系列的示例来详细介绍如何利用 Java 中的 `java....
总结一下,`java.util.zip` 包提供了解压缩和压缩文件的强大功能,这对于任何需要处理ZIP文件的Java开发者来说都是必不可少的工具。无论你是想解压下载的库,还是想将项目文件打包成ZIP,这个包都能提供简洁且高效的...
为了支持中文文件名,我们需要对`java.util.zip`下的源码进行修改,尤其是`ZipOutputStream`类。主要的修改点可能在于设置正确的字符编码,例如使用`UTF-8`。在创建`ZipEntry`对象时,需要确保文件名被正确地转换为...
在Java编程语言中,`java.util.zip`包提供了对压缩文件格式的支持,如ZIP和GZ等。然而,早期版本的Java在处理包含非ASCII字符(例如中文字符)的文件名时存在一些问题。这是因为ZIP文件格式本身是支持Unicode编码的...
在Java编程语言中,处理日期和时间时经常使用到`java.util.Date`和`java.sql.Date`这两个类。它们虽然名字相似,但在实际应用中有很大的区别。 - **`java.util.Date`**:这个类提供了创建和操作日期/时间的功能,它...
在Java编程语言中,`java.util.InputMismatchException`是一个常见的运行时异常,它通常发生在尝试从数据源(如控制台、文件或数据库)读取数据时,遇到的数据类型与预期的不匹配。在这个特定的场景中,问题出在主线...
### Java.util.Date与Java.sql.Date相互转换 #### 知识点概述 在Java开发中,经常...通过上述方法,可以在Java程序中灵活地完成 `java.util.Date` 和 `java.sql.Date` 之间的相互转换,从而满足不同场景下的需求。
在Java编程语言中,`java.util.zip`包提供了一系列类和接口,用于处理ZIP文件格式。这个包的主要目的是为了方便地进行文件的压缩和解压缩操作。`Zipper`类是一个自定义的类,它利用了`java.util.zip`包中的功能来...
1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...
"java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError" 是一个典型的错误提示,它表明在并发执行过程中遇到了内存不足的问题。下面我们将深入探讨这个问题的原因、影响以及如何解决。 内存溢出...
在使用Apache Tomcat服务器时,有时会遇到启动异常的情况,其中一种常见的错误是`java.util.zip.ZipException`。这个异常通常表明在处理ZIP或JAR文件时遇到了问题,可能是因为文件损坏、格式不正确或者无法打开。在...
Java提供日期(Data)类、日历(Calendar)类,随机数(Random)类,堆栈(Stack)、向量(Vector) 、位集合(Bitset)以及哈希表(Hashtable)等类来表示相应的数据结构
### Java.util.logging.Logger 使用详解 #### 一、创建Logger对象 在Java中,`java.util.logging.Logger` 是标准的日志框架之一,它提供了基础的日志记录功能。为了使用这一功能,首先需要获得 `java.util.logging...
Java编程语言提供了两个重要的日期处理类,分别是`java.util.Date`和`java.sql.Date`,它们在处理日期和时间上有着不同的特性和用途。 `java.util.Date`是更通用的日期时间类,它包含了日期和时间的信息,可以精确...
在Java编程语言中,`java.util.zip`包提供了一系列的类和接口,用于处理ZIP格式的压缩和解压缩操作。这个包中的核心类包括`ZipOutputStream`和`ZipInputStream`,它们分别用于创建ZIP文件和读取解压缩ZIP文件。下面...
在Java中,`java.util.Date` 和 `java.sql.Date` 都是用来表示日期的类,但它们有着不同的应用场景和特性。 `java.util.Date` 是一个广泛使用的类,它可以表示从1970年1月1日(UTC)午夜开始到现在的毫秒数。这个类...
java.util.Date和java.sql.Date是两个不同的日期时间类,需要根据实际情况选择正确的使用场景。理解它们之间的区别和互转方式是非常重要的。在进行数据库操作时,需要注意java.sql.Date的规范化问题,以免数据截取。...