马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
java主要分三块,j2se:java的基础核心语言。j2me:java的微型模块,专门针对内存小,没有持续电源等小型设备。j2ee:java的企业模块,专门针对企业数据库服务器的连接维护。功能格局化开支
实践上,将数据写进文件只是输入开支的一部分。别的一个伟大的开支是数据的格局化。思索上面的三个例子,请求其输入以下的行:
Thesquareof5is25
办法1
第一种办法是复杂地输入一个流动串,以失掉外部I/O开支的观点:
publicclassformat1{
publicstaticvoidmain(Stringargs[]){
finalintCOUNT=25000;
for(inti=1;i<=COUNT;i++){
Strings="Thesquareof5is25
";
System.out.print(s);
}
}
}
办法2
第二种办法接纳带"+"的复杂格局化:
publicclassformat2{
publicstaticvoidmain(Stringargs[]){
intn=5;
finalintCOUNT=25000;
for(inti=1;i<=COUNT;i++){
Strings="Thesquareof"+n+"is"+n*n+"
";
System.out.print(s);
}
}
}
办法3
第三种办法利用了java.text包中的类MessageFormat:
importjava.text.*;
publicclassformat3{
publicstaticvoidmain(Stringargs[]){
MessageFormatfmt=
newMessageFormat("Thesquareof{0}is{1}
");
Objectvalues[]=newObject[2];
intn=5;
values[0]=newInteger(n);
values[1]=newInteger(n*n);
finalintCOUNT=25000;
for(inti=1;i<=COUNT;i++){
Strings=fmt.format(values);
System.out.print(s);
}
}
}
这些程序发生不异的输入,运转工夫为:
format11.3
format21.8
format37.8
最快和最慢之间的差异为6比1。假如该格局没有举行预编译,而且接纳了便当的静态办法,第三个程序将更慢。
办法4
利用MessageFormat.format(String,Object[])办法以下:
importjava.text.*;
publicclassformat4{
publicstaticvoidmain(Stringargs[]){
Stringfmt="Thesquareof{0}is{1}
";
Objectvalues[]=newObject[2];
intn=5;
values[0]=newInteger(n);
values[1]=newInteger(n*n);
finalintCOUNT=25000;
for(inti=1;i<=COUNT;i++){
Strings=MessageFormat.format(fmt,values);
System.out.print(s);
}
}
}
这比前一个例子消费的工夫还要长1/3。
办法3比1、2慢一点,其实不意味不该该接纳它。可是,应当分明在工夫上的价值。
在国际化言语情况中,动静的格局长短常主要的,触及到这个成绩的使用程序一般从一个资本文件中读取该格局,然后利用它。
随机存储
RandomAccessFile是用于对文件举行随机I/O存储(在字节条理上)的一个Java类。该类供应了一个与C/C++中类似的搜刮办法,以将文件指针挪动就任意地位,然后就能够对从那边入手下手的字节举行读或写了。该搜刮办法会见底层的运转体系,正由于云云,开支大概十分高贵。一个略微便宜的替换办法是,在RandomAccessFile顶部设置本人的缓冲,而且完成对字节的间接读取办法。用于读取的参数是所需字节的字节偏移量。上面的例子显现了这是怎样举行的:
importjava.io.*;
publicclassReadRandom{
privatestaticfinalintDEFAULT_BUFSIZE=4096;
privateRandomAccessFileraf;
privatebyteinbuf[];
privatelongstartpos=-1;
privatelongendpos=-1;
privateintbufsize;
publicReadRandom(Stringname)
throwsFileNotFoundException{
this(name,DEFAULT_BUFSIZE);
}
publicReadRandom(Stringname,intb)
throwsFileNotFoundException{
raf=newRandomAccessFile(name,"r");
bufsize=b;
inbuf=newbyte[bufsize];
}
publicintread(longpos){
if(pos<startpos||pos>endpos){
longblockstart=(pos/bufsize)*bufsize;
intn;
try{
raf.seek(blockstart);
n=raf.read(inbuf);
}
catch(IOExceptione){
return-1;
}
startpos=blockstart;
endpos=blockstart+n-1;
if(pos<startpos||pos>endpos)
return-1;
}
returninbuf[(int)(pos-startpos)]&0xffff;
}
publicvoidclose()throwsIOException{
raf.close();
}
publicstaticvoidmain(Stringargs[]){
if(args.length!=1){
System.err.println("missingfilename");
System.exit(1);
}
try{
ReadRandomrr=newReadRandom(args[0]);
longpos=0;
intc;
bytebuf[]=newbyte[1];
while((c=rr.read(pos))!=-1){
pos++;
buf[0]=(byte)c;
System.out.write(buf,0,1);
}
rr.close();
}
catch(IOExceptione){
System.err.println(e);
}
}
}
本驱动器程序复杂地按次读取字节,而且输入。
假如具有存储的部分性(在文件中相邻地位的字节能够被同时读取),那末这项手艺很有匡助。比方,假如在已排序的文件中完成二叉树搜刮算法,此办法大概很有效。假如在一个年夜文件中的恣意地位举行随机存储,其代价较小。
还有就是总有人问我到底该学习什么语言,什么语言有前途,那么我的回答是不论是C,C++,java,.net,ruby,asp或是其他语言都可以学,编程的关键不是语言,而是思想。 |