JAVA网页编程之JAVA下的GZIP使用
到时我们不用学struts,不用学spring,不用学Hibernate,只要能把jsf学会了,完全可以替代所有的框架,包括AJAX,都知道AJAX并不是新技术,虽说我没深入学习jsf但我认为jsf应该已经能通过其它技术替代AJAX,实现无缝刷新。gzip是今朝普遍使用的一种紧缩体例,它具有很高的紧缩比和紧缩效力.在sun公司公布的jdk中包括了java.util.zip包,对gzip供应了间接撑持.利用java言语能够很便利的完成gzip紧缩息争紧缩.以下是一个紧缩息争紧缩的最简程序.
(紧缩:gzip.java)
importjava.io.*;
importjava.util.zip.*;
publicclassgzip
{
publicstaticvoidmain(String[]args)
{
if(args.length!=2)
{
System.out.println("Usage:javagzip");
System.exit(1);
}
try
{
//翻开需紧缩文件作为文件输出流
FileInputStreamfin=newFileInputStream(args);
//创建紧缩文件输入流
FileOutputStreamfout=newFileOutputStream(args);
//创建gzip紧缩输入流
GZIPOutputStreamgzout=newGZIPOutputStream(fout);
byte[]buf=newbyte;//设定读进缓冲区尺寸
intnum;
while((num=fin.read(buf))!=-1)
{
gzout.write(buf,0,num);
}
gzout.close();//!!!封闭流,必需封闭一切输出输入流.包管输出输入完全和开释体系资本.
fout.close();
fin.close();
}catch(IOExceptione)
{
System.out.println(e);
}
}
}
(解紧缩:unzip.java)
importjava.io.*;
importjava.util.zip.*;
publicclassungzip
{
publicstaticvoidmain(String[]args)
{
if(args.length!=2)
{
System.out.println("Usage:javaungzip");
System.exit(1);
}
try
{
//创建gzip紧缩文件输出流
FileInputStreamfin=newFileInputStream(args);
//创建gzip解压事情流
GZIPInputStreamgzin=newGZIPInputStream(fin);
//创建解压文件输入流
FileOutputStreamfout=newFileOutputStream(args);
byte[]buf=newbyte;
intnum;
while((num=gzin.read(buf,0,buf.length))!=-1)
{
fout.write(buf,0,num);
}
gzin.close();
fout.close();
fin.close();
}catch(IOExceptione)
{
System.out.println(e);
}
}
}
非面向对象言语要完成保留事情数据(如一个画图程序保留一幅画面的界说),常常必要一个程序数据格局转换为内部
文件格局存储,事情时再反向转换的历程.完成对照贫苦,编程不通明.而java言语是一种面向对象的言语,利用它的对象序
列化特征,便可完成将事情对象(画面界说对象数据)间接写进硬盘,必要时再间接再读进内存,不需任何分外操纵.完成十分
便利.但因为写出对象为java类格局,因而数据冗余度较年夜.当数据量很年夜时,常常形成存储文件很年夜.过量的磁盘操纵也招致
数据读进消费了更多工夫,占据了大批内存.接纳gzip紧缩存储对象是办理此类成绩的无效手腕.(在自己完成的一个监控系
统中,调进一幅测试画面(10万个组件,紧缩前7M,紧缩后600K),紧缩前对如画面后内存为26M,紧缩后读进内存为12M,读进速
度也年夜幅进步.效果非常分明).
java程序开辟收集使用程序是它的最年夜上风,但在某些低速收集情形下(Internet、拨号收集).收集常常形成传输瓶颈,
影呼应用效果,关于及时性请求高的使用影响更年夜.接纳紧缩能够无效改良通讯效果.
可见,在java下的对象gzip紧缩有着普遍的使用代价.以下是一个复杂事例程序.
(串行化的数据对象文件:Data.java)
importjava.io.*;
importjava.util.zip.*;
publicclassDataimplementsSerializable//承继串行序列化接口
{
Stringname="婚配";
intage=123;
floatheight=1.902f;
}
(对象紧缩解紧缩类文件:compressObject.java)
importjava.util.zip.*;
importjava.io.*;
publicfinalclasscompressObject
{
//将Data范例数据对象序列化对象紧缩,前往字节数组,紧缩后的对象数组可写进文件保留或用于收集传输
publicstaticbyte[]writeCompressObject(Dataobject_)
{
byte[]data_=null;
try
{
//创建字节数组输入流
ByteArrayOutputStreamo=newByteArrayOutputStream();
//创建gzip紧缩输入流
GZIPOutputStreamgzout=newGZIPOutputStream(o);
//创建对象序列化输入流
ObjectOutputStreamout=newObjectOutputStream(gzout);
out.writeObject(object_);
out.flush();
out.close();
gzout.close();
//前往紧缩字撙节
data_=o.toByteArray();
o.close();
}catch(IOExceptione)
{
System.out.println(e);
}
return(data_);
}
//将紧缩字节数组复原为Data范例数据对象
publicstaticDatareadCompressObject(byte[]data_)
{
Dataobject_=null;
try
{
//创建字节数组输出流
ByteArrayInputStreami=newByteArrayInputStream(data_);
//创建gzip解压输出流
GZIPInputStreamgzin=newGZIPInputStream(i);
//创建对象序列化输出流
ObjectInputStreamin=newObjectInputStream(gzin);
//按制订范例复原对象
object_=(Data)in.readObject();
i.close();
gzin.close();
in.close();
}catch(ClassNotFoundExceptione)
{
System.out.println(e);
}catch(IOExceptione)
{
System.out.println(e);
}
return(object_);
}
}
(主程序:test.java)
importjava.io.*;
importjava.util.zip.*;
publicclasstest
{
publicstaticvoidmain(String[]args)
{
DatatestData_=newData();
//未紧缩数据对象内容
System.out.println("name="+testData_.name+"age="+testData_.age+"height="+testData_.height);
//紧缩
byte[]i_=compressObject.writeCompressObject(testData_);
/*
可实行保留或收集传输,必要时复原或在对端复原
*/
//解紧缩
Datao_=compressObject.readCompressObject(i_);
//解紧缩后对象内容
System.out.println("name="+o_.name+"age="+o_.age+"height="+o_.height);
}
}
以上只是java下使用gzip紧缩的一个复杂例子,请人人触类旁通在本人的开辟中利用.因为自己程度所限,不妥的地方
轮性能微软曾做过一个例子,就是同一个项目用java和.net来作,结果开发周期,.net是java的一半,性能java是.net的十分之一,代码量java是.net的三倍。呵呵,这说明了什么,.net的全方位比java好。但是有的人说.net不能跨平台,这个问题我和我同学曾讨论过,都认为微软的.net很可能早都可以跨平台了,但是微软为了保护他们的操作系统,所以才没有推出跨平台的.net,只是推出了跨语言的.net, 你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。 《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想) J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。 有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想) 你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。 http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。 是一种将安全性(Security)列为第一优先考虑的语言 你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台 Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台 在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
页:
[1]