首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 网页制作
JAVA下的GZIP应用-JSP教程,Java技巧及代码
作者:网友供稿 点击:17
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
gzip是目前广泛应用的一种压缩方式,它具有很高的压缩比和压缩效率.在sun公司发布的jdk中包含了java.util.zip
包,对gzip提供了直接支持.使用java语言可以很方便的实现gzip压缩和解压缩.以下是一个压缩和解压缩的最简程序.
(压缩:gzip.java)
import java.io.*;
import java.util.zip.*;

public class gzip
{
public static void main(string[] args)
{
if (args.length !=2)
{
system.out.println("usage:java gzip ");
system.exit(1);
}
try
{
//打开需压缩文件作为文件输入流
fileinputstream fin=new fileinputstream(args[0]);
//建立压缩文件输出流
fileoutputstream fout=new fileoutputstream(args[1]);
//建立gzip压缩输出流
gzipoutputstream gzout=new gzipoutputstream(fout);
byte[] buf=new byte[1024];//设定读入缓冲区尺寸
int num;

while ((num=fin.read(buf)) != -1)
{
gzout.write(buf,0,num);
}
gzout.close();//!!!关闭流,必须关闭所有输入输出流.保证输入输出完整和释放系统资源.
fout.close();
fin.close();
}catch(ioexception e)
{
system.out.println(e);
}
}
}
(解压缩:unzip.java)
import java.io.*;
import java.util.zip.*;

public class ungzip
{
public static void main(string[] args)
{
if (args.length !=2)
{
system.out.println("usage:java ungzip ");
system.exit(1);
}
try
{
//建立gzip压缩文件输入流
fileinputstream fin=new fileinputstream(args[0]);
//建立gzip解压工作流
gzipinputstream gzin=new gzipinputstream(fin);
//建立解压文件输出流
fileoutputstream fout=new fileoutputstream(args[1]);
byte[] buf=new byte[1024];
int num;

while ((num=gzin.read(buf,0,buf.length)) != -1)
{
fout.write(buf,0,num);
}
gzin.close();
fout.close();
fin.close();
}catch(ioexception e)
{
system.out.println(e);
}
}
}
非面向对象语言要实现保存工作数据(如一个绘图程序保存一幅画面的定义),往往需要一个程序数据格式转换为外部
文件格式存储,工作时再反向转换的过程.实现比较麻烦,编程不透明.而java语言是一种面向对象的语言,使用它的对象序
列化特性,就可实现将工作对象(画面定义对象数据)直接写入硬盘,需要时再直接再读入内存,不需任何额外操作.实现非常
方便.但由于写出对象为java类格式,因此数据冗余度较大.当数据量很大时,往往造成存储文件很大.过多的磁盘操作也导致
数据读入花费了更多时间,占有了大量内存.采用gzip压缩存储对象是解决此类问题的有效手段.(在本人实现的一个监控系
统中,调入一幅测试画面(10万个组件,压缩前7m,压缩后600k),压缩前对如画面后内存为26m,压缩后读入内存为12m,读入速
度也大幅提高.效果十分明显).
java程序开发网络应用程序是它的最大优势,但在某些低速网络情况下(internet、拨号网络).网络往往造成传输瓶颈,
影响应用效果,对于实时性要求高的应用影响更大.采用压缩可以有效改善通信效果.
可见,在java下的对象gzip压缩有着广泛的应用价值.以下是一个简单事例程序.
(串行化的数据对象文件:data.java)
import java.io.*;
import java.util.zip.*;
public class data implements serializable//继承串行序列化接口
{
string name="匹配";
int age=123;
float height=1.902f;
}
(对象压缩解压缩类文件:compressobject.java)
import java.util.zip.*;
import java.io.*;
public final class compressobject
{
//将data类型数据对象序列化对象压缩,返回字节数组,压缩后的对象数组可写入文件保存或用于网络传输
public static byte[] writecompressobject(data object_)
{
byte[] data_=null;
try
{
//建立字节数组输出流
bytearrayoutputstream o = new bytearrayoutputstream();
//建立gzip压缩输出流
gzipoutputstream gzout=new gzipoutputstream(o);
//建立对象序列化输出流
objectoutputstream out = new objectoutputstream(gzout);
out.writeobject(object_);
out.flush();
out.close();
gzout.close();
//返回压缩字节流
data_=o.tobytearray();
o.close();
}catch(ioexception e)
{
system.out.println(e);
}
return(data_);
}
//将压缩字节数组还原为data类型数据对象
public static data readcompressobject(byte[] data_)
{
data object_=null;
try
{
//建立字节数组输入流
bytearrayinputstream i = new bytearrayinputstream(data_);
//建立gzip解压输入流
gzipinputstream gzin=new gzipinputstream(i);
//建立对象序列化输入流
objectinputstream in = new objectinputstream(gzin);
//按制定类型还原对象
object_=(data)in.readobject();
i.close();
gzin.close();
in.close();
}catch(classnotfoundexception e)
{
system.out.println(e);
}catch(ioexception e)
{
system.out.println(e);
}
return(object_);
}
}
(主程序:test.java)
import java.io.*;
import java.util.zip.*;

public class test
{
public static void main(string[] args)
{
data testdata_=new data();
//未压缩数据对象内容
system.out.println("name="+testdata_.name+" age="+testdata_.age+" height="+testdata_.height);
//压缩
byte[] i_=compressobject.writecompressobject(testdata_);

/*
可执行保存或网络传输,需要时还原或在对端还原
*/

//解压缩
data o_=compressobject.readcompressobject(i_);
//解压缩后对象内容
system.out.println("name="+o_.name+" age="+o_.age+" height="+o_.height);
}
}
以上只是java下应用gzip压缩的一个简单例子,请大家举一反三在自己的开发中使用.由于本人水平所限,不当之处

文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·中文字符从jsp传送到servlet的处理-JSP教程,Jsp/Servlet
·带右键菜单的树形控件(1)-ASP教程,ASP应用
·RSA加密解密及RSA签名和验证-.NET教程,安全和优化
·VB中String的用法及原理-.NET教程,VB.Net语言
·ASP Forum2.0学习笔记之二---了解Master Pages库-ASP教程,数据库相关
·使用ImageList时候发生运行错误提示资源问题的解决方法-.NET教程,评论及其它
·web.config点滴:更改login控件对密码安全性的要求-.NET教程,组件控件开发
·基于h.323协议的ip视频会议质量技术
·框架(javascript)-JSP教程,Java技巧及代码
·讲一讲ASP处理数据用的组件ADO (ActiveX Data Object)-ASP教程,数据库相关
最新文章
·从两方面看ajax与b/s_ajax教程
·google adsense for content新的广告样式_google推广
·flash as代码简单实现动态文本包边效果_flash教程
·我做gg广告从0到每月1000美元详细全过程_网赚技巧
·google adsense 中文高价关键词一览_网赚技巧
·谁说小网站赚不到钱!_网赚技巧
·什么样的网站才算是高质量网站呢?_站长心得
·经验:搜索引擎的页面各个元素的权重比例参考_站长心得
·搜索引擎google排名优化全攻略_google推广
·月入千美金不是梦--adsense高收入实战及分_google推广
相关主题
  • Java下的Framework编写(4)--Annotation vs XML-JSP教程,Java与XML
  • Java下XML编程接口比较:DOM SAX JDOM JAXP-.NET教程,XML应用
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭