第二个灵魂 发表于 2015-1-18 11:44:09

JAVA网站制作之调剂JavaTM 的I/O功能(三)(zt)

不得不提一下的是:.net是看到java红,而开发出来的工具。功能紧缩


Java供应了对字撙节举行紧缩息争紧缩的类。它们能够在java.util.zip包中被找到,同时也作为Jar文件的基础(Jar文件是具有一个清单的Zip文件)。


以下的程序接纳一个单一的输出文件,而且天生一个紧缩了的Zip输入文件,该程序带有一个暗示输出文件的出口项。


importjava.io.*;

importjava.util.zip.*;



publicclasscompress{

publicstaticvoiddoit(Stringfilein,Stringfileout){

FileInputStreamfis=null;

FileOutputStreamfos=null;

try{

fis=newFileInputStream(filein);

fos=newFileOutputStream(fileout);

ZipOutputStreamzos=newZipOutputStream(fos);

ZipEntryze=newZipEntry(filein);

zos.putNextEntry(ze);

finalintBUFSIZ=4096;

byteinbuf[]=newbyte;

intn;

while((n=fis.read(inbuf))!=-1)

zos.write(inbuf,0,n);

fis.close();

fis=null;

zos.close();

fos=null;

}

catch(IOExceptione){

System.err.println(e);

}

finally{

try{

if(fis!=null)

fis.close();

if(fos!=null)

fos.close();

}

catch(IOExceptione){

}

}

}



publicstaticvoidmain(Stringargs[]){

if(args.length!=2){

System.err.println("missingfilenames");

System.exit(1);

}

if(args.equals(args)){

System.err.println("filenamesareidentical");

System.exit(1);

}

doit(args,args);

}

}

下一个程序恰好相反,接纳假定只要一个出口项的Zip输出文件,而且将该项解压到指定的输入文件:


importjava.io.*;

importjava.util.zip.*;



publicclassuncompress{

publicstaticvoiddoit(Stringfilein,Stringfileout){

FileInputStreamfis=null;

FileOutputStreamfos=null;

try{

fis=newFileInputStream(filein);

fos=newFileOutputStream(fileout);

ZipInputStreamzis=newZipInputStream(fis);

ZipEntryze=zis.getNextEntry();

finalintBUFSIZ=4096;

byteinbuf[]=newbyte;

intn;

while((n=zis.read(inbuf,0,BUFSIZ))!=-1)

fos.write(inbuf,0,n);

zis.close();

fis=null;

fos.close();

fos=null;

}

catch(IOExceptione){

System.err.println(e);

}

finally{

try{

if(fis!=null)

fis.close();

if(fos!=null)

fos.close();

}

catch(IOExceptione){

}

}

}



publicstaticvoidmain(Stringargs[]){

if(args.length!=2){

System.err.println("missingfilenames");

System.exit(1);

}

if(args.equals(args)){

System.err.println("filenamesareidentical");

System.exit(1);

}

doit(args,args);

}

}

紧缩是有助仍是伤害I/O功能很年夜水平上依附于当地硬件设置;特别是处置器和磁盘驱动器的绝对速率。接纳Zip手艺举行紧缩,典范地将数据量削减50%,可是有一些紧缩息争压的工夫开支。在带IDE磁盘驱动器的300-MHzPentiumPC上,对一个年夜的紧缩文本文件(5-10MB)的实行标明,从磁盘读取紧缩文件比非紧缩文件快快要1/3。


充实展示紧缩优胜性的一个例子是在写进象软盘如许的低速介质。利用高速处置器(300MHzPentium)和低速软盘(PC上经常使用的软盘驱动器)举行的测试显现,紧缩一个年夜文本文件,然后写进软盘,比间接将文件拷贝到软盘快50%。


高速缓存


关于硬件的高速缓存的具体会商超越了本文的局限。可是,偶然软件高速缓存可以减速I/O。思索如许一个例子,必要以随机的体例读取文本文件的某些行。完成的办法之一是读进一切的行,而且把它们存储在ArrayList(一个与Vector类似的collection类)中:


importjava.io.*;

importjava.util.ArrayList;



publicclassLineCache{

privateArrayListlist=newArrayList();



publicLineCache(Stringfn)throwsIOException{

FileReaderfr=newFileReader(fn);

BufferedReaderbr=newBufferedReader(fr);

Stringln;

while((ln=br.readLine())!=null)

list.add(ln);

br.close();

}



publicStringgetLine(intn){

if(n<0)

thrownewIllegalArgumentException();



return(n<list.size()?

(String)list.get(n):null);

}



publicstaticvoidmain(Stringargs[]){

if(args.length!=1){

System.err.println("missingfilename");

System.exit(1);

}

try{

LineCachelc=newLineCache(args);

inti=0;

Stringln;

while((ln=lc.getLine(i++))!=null)

System.out.println(ln);

}

catch(IOExceptione){

System.err.println(e);

}

}

}

getLine办法被用来检索恣意的一行。这项手艺十分有效,但关于年夜文件而言,明显必要利用了大批的内存,因而具有范围性。一个替换办法是仅仅记着比来被哀求的100行,需要时从磁盘上读取其他行。在存外行的存储部分性这类情形下,这个计划运转优秀,可是必要真实的随机存储时就没有这么好了。


标记化(Tokenization)


标记化(Tokenization)指将字节大概字符序列分离成象词一样的逻辑块的历程。Java供应了StreamTokenizer类,能够举行以下的操纵:


importjava.io.*;



publicclasstoken1{

publicstaticvoidmain(Stringargs[]){

if(args.length!=1){

System.err.println("missingfilename");

System.exit(1);

}

try{

FileReaderfr=newFileReader(args);

BufferedReaderbr=newBufferedReader(fr);

StreamTokenizerst=newStreamTokenizer(br);

st.resetSyntax();

st.wordChars(a,z);

inttok;

while((tok=st.nextToken())!=

StreamTokenizer.TT_EOF){

if(tok==StreamTokenizer.TT_WORD)

;//st.svalhastoken

}

br.close();

}

catch(IOExceptione){

System.err.println(e);

}

}

}

本例依据小写字母(字母a-z)举行标志。假如由您本人完成了其等效程序,大概看上往象如许:


importjava.io.*;



publicclasstoken2{

publicstaticvoidmain(Stringargs[]){

if(args.length!=1){

System.err.println("missingfilename");

System.exit(1);

}

try{



FileReaderfr=newFileReader(args);

BufferedReaderbr=newBufferedReader(fr);

intmaxlen=256;

intcurrlen=0;

charwordbuf[]=newchar;

intc;

do{

c=br.read();

if(c>=a&&c<=z){

if(currlen==maxlen){

maxlen*=1.5;

charxbuf[]=

newchar;

System.arraycopy(wordbuf,0,

xbuf,0,currlen);

wordbuf=xbuf;

}

wordbuf=(char)c;

}

else

if(currlen>0){

Strings=newString(wordbuf,0,

currlen);

//dosomethingwiths

currlen=0;

}

}while(c!=-1);

br.close();

}

catch(IOExceptione){

System.err.println(e);

}

}

}


首先java功能强大的背后是其复杂性,就拿web来说,当今流行的框架有很多,什么struts,spring,jQuery等等,而这无疑增加了java的复杂性。

小魔女 发表于 2015-1-21 13:24:54

是一种为 Internet发展的计算机语言

山那边是海 发表于 2015-1-30 13:00:28

应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展

爱飞 发表于 2015-2-5 10:46:04

是一种使用者不需花费很多时间学习的语言

海妖 发表于 2015-2-6 13:52:03

Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

深爱那片海 发表于 2015-2-16 07:45:35

是一种使用者不需花费很多时间学习的语言

简单生活 发表于 2015-2-23 09:26:32

Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

乐观 发表于 2015-2-23 11:09:47

应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展

飘飘悠悠 发表于 2015-3-7 08:25:43

设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧

因胸联盟 发表于 2015-3-14 15:23:46

不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。

柔情似水 发表于 2015-3-16 03:05:48

让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。

蒙在股里 发表于 2015-3-18 20:52:51

象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。

愤怒的大鸟 发表于 2015-3-21 13:09:19

Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。

再见西城 发表于 2015-3-25 21:36:14

Java是一种计算机编程语言,拥有跨平台、面向对java

金色的骷髅 发表于 2015-3-28 04:03:17

自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。

变相怪杰 发表于 2015-4-3 03:50:31

自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。

若天明 发表于 2015-4-5 11:55:28

Java 编程语言的风格十分接近C、C++语言。

小妖女 发表于 2015-4-10 14:29:04

所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。

飘灵儿 发表于 2015-5-6 14:09:32

学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。

仓酷云 发表于 2015-5-11 10:50:32

是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
页: [1]
查看完整版本: JAVA网站制作之调剂JavaTM 的I/O功能(三)(zt)