|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
到时我们不用学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[0]);
//创建紧缩文件输入流
FileOutputStreamfout=newFileOutputStream(args[1]);
//创建gzip紧缩输入流
GZIPOutputStreamgzout=newGZIPOutputStream(fout);
byte[]buf=newbyte[1024];//设定读进缓冲区尺寸
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[0]);
//创建gzip解压事情流
GZIPInputStreamgzin=newGZIPInputStream(fin);
//创建解压文件输入流
FileOutputStreamfout=newFileOutputStream(args[1]);
byte[]buf=newbyte[1024];
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, |
|