马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
再说说缺点:首先java功能强大的背后是其复杂性,就拿web来说,当今流行的框架有很多,什么struts,spring,jQuery等等,而这无疑增加了java的复杂性。紧缩使用Java完成zip紧缩/解紧缩
( 2000年07月06日13:30)
因为收集带宽无限,以是数据文件的紧缩有益于数据在Internet上的疾速传输,同时也节
省服务器的外存空间。
Java1.1完成了I/O数据流与收集数据流的单一接口,因而数据的紧缩、收集传输息争
紧缩的完成对照简单,上面先容使用ZipEntry、ZipInputStream和ZipOutputStream三个Java
类完成zip数据紧缩体例的编程办法。
zip紧缩文件布局:一个zip文件由多个entry构成,每一个entry有一个独一的称号,entry的
数据项存储紧缩数据。
与zip文件有关的几个Java类
・类ZipEntry
publicZipEntry(Stringname);
name为指定的数据项名。
・类ZipOutputStream
ZipOutputStream完成了zip紧缩文件的写输入流,撑持紧缩和非紧缩entry。上面是它的
几个函数:
publicZipOutputStream(OutputStreamout);
∥使用输入流out机关一个ZIP输入流。
publicvoidsetMethod(intmethod);
∥设置entry紧缩办法,缺省值为DEFLATED。
publicvoidputNextEntry(ZipEntrynewe);
∥假如以后的entry存在且处于激活形态时,封闭它,在zip文件中写进新的entry-newe
并将数据流定位于entry数据项的肇端地位,紧缩办法为setMethod指定的办法。
・类ZipInputStream
ZipInputStream完成了zip紧缩文件的读输出流,撑持紧缩和非紧缩entry。上面是它的
几个函数:
publicZipInputStream(InputStreamin);
∥使用输出流in机关一个ZIP输入流。
publicZipEntrygetNextEntry();
∥前往ZIP文件中的下一个entry,并将输入流定位在此entry数据项的肇端地位。
publicvoidcloseEntry();
∥封闭以后的zipentry,并将数据流定位于下一个entry的肇端地位。
程序代码及其正文
以下的程序完成了数据文件zip体例的紧缩息争紧缩办法。randomData()函数随机天生
50个double数据,并放在doc字符串变量中;openFile()函数读取ZIP紧缩文件;saveFile()函数
将随机天生的数据存到ZIP格局的紧缩文件中。
importjava.util.zip.*;
importjava.awt.event.*;
importjava.awt.*;
importjava.lang.Math;
importjava.io.*;
publicclassTestZipextendsFrameimplementsActionListener{
TextAreatextarea;∥显现数据文件的多行文本显现域
TextFieldinfotip;∥显现数据文件未紧缩巨细及紧缩巨细单行文本显现域
Stringdoc;∥存储随机天生的数据
longdoczipsize=0;∥紧缩数据文件的巨细
publicTestZip(){
∥天生菜单
MenuBarmenubar=newMenuBar();
setMenuBar(menubar);
Menufile=newMenu("File",true);
menubar.add(file);
MenuItemneww=newMenuItem("New");
neww.addActionListener(this);
file.add(neww);
MenuItemopen=newMenuItem("Open");
open.addActionListener(this);
file.add(open);
MenuItemsave=newMenuItem("Save");
save.addActionListener(this);
file.add(save);
MenuItemexit=newMenuItem("Exit");
exit.addActionListener(this);
file.add(exit);
∥随机天生的数据文件的多行文本显现域
add("Center",textarea=newTextArea());
∥提醒文来源根基始巨细、紧缩巨细的单行文本显现域
add("South",infotip=newTextField());
}
publicstaticvoidmain(Stringargs[]){
TestZipok=newTestZip();
ok.setTitle("zipsample");
ok.setSize(600,300);
ok.show();
}
privatevoidrandomData(){
∥随机天生50个double数据,并放在doc字符串变量中。
doc="";
for(inti=1;i<51;i++){
doublerdm=Math.random()*10;
doc=doc+newDouble(rdm).toString();
if(i%5==0)doc=doc+"
";
elsedoc=doc+"";
}
doczipsize=0;
showTextandInfo();
}
privatevoidopenFile(){
∥翻开zip文件,将文件内容读进doc字符串变量中。
FileDialogdlg=newFileDialog(this,"Open",FileDialog.LOAD);
dlg.show();
Stringfilename=dlg.getDirectory()+dlg.getFile();
try{
∥创立一个文件实例
Filef=newFile(filename);
if(!f.exists())return;∥文件不存在,则前往
∥用文件输出流构建ZIP紧缩输出流
ZipInputStreamzipis=newZipInputStream(newFileInputStream(f));
zipis.getNextEntry();
∥将输出流定位在以后entry数据项地位
DataInputStreamdis=newDataInputStream(zipis);
∥用ZIP输出流构建DataInputStream
doc=dis.readUTF();∥读取文件内容
dis.close();∥封闭文件
doczipsize=f.length();∥猎取ZIP文件长度
showTextandInfo();∥显现数据
}
catch(IOExceptionioe){
System.out.println(ioe);
}
}
privatevoidsaveFile(){
∥翻开zip文件,将doc字符串变量写进zip文件中。
FileDialogdlg=newFileDialog(this,"Save",FileDialog.SAVE);
dlg.show();
Stringfilename=dlg.getDirectory()+dlg.getFile();
try{
∥创立一个文件实例
Filef=newFile(filename);
if(!f.exists())return;∥文件不存在,则前往
∥用文件输入流构建ZIP紧缩输入流
ZipOutputStreamzipos=newZipOutputStream(newFileOutputStream(f));
zipos.setMethod(ZipOutputStream.DEFLATED);∥设置紧缩办法
zipos.putNextEntry(newZipEntry("zip"));
∥天生一个ZIPentry,写进文件输入流中,并将输入流定位于entry肇端处。
DataOutputStreamos=newDataOutputStream(zipos);
∥用ZIP输入流构建DataOutputStream;
os.writeUTF(doc);∥将随机天生的数据写进文件中
os.close();∥封闭数据流
doczipsize=f.length();
∥猎取紧缩文件的长度
showTextandInfo();∥显现数据
}
catch(IOExceptionioe){
System.out.println(ioe);
}
}
privatevoidshowTextandInfo(){
∥显现数据文件和紧缩信息
textarea.replaceRange(doc,0,textarea.getText().length());
infotip.setText("uncompressedsize:"+doc.length()+"compressedsize:"+dczipsize);
}
publicvoidactionPerformed(ActionEvente){
Stringarg=e.getActionCommand();
if("New".equals(arg))randomData();
elseif("Open".equals(arg))openFile();
elseif("Save".equals(arg))saveFile();
elseif("Exit".equals(arg)){
dispose();∥封闭窗口
System.exit(0);∥封闭程序
}
else{
System.out.println("nothiscommand!");
}
}
}
C#跟java类似,但是在跨平台方面理论上可以跨平台,实际上应用不大,执行性能优于java,跟C++基本一致,但是启动速度还是慢.代码安全,但容易性能陷阱. |