JAVA网页设计调剂JavaTM 的I/O功能(二)(zt)
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;
intn=5;
values=newInteger(n);
values=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;
intn=5;
values=newInteger(n);
values=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;
}
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);
longpos=0;
intc;
bytebuf[]=newbyte;
while((c=rr.read(pos))!=-1){
pos++;
buf=(byte)c;
System.out.write(buf,0,1);
}
rr.close();
}
catch(IOExceptione){
System.err.println(e);
}
}
}
本驱动器程序复杂地按次读取字节,而且输入。
假如具有存储的部分性(在文件中相邻地位的字节能够被同时读取),那末这项手艺很有匡助。比方,假如在已排序的文件中完成二叉树搜刮算法,此办法大概很有效。假如在一个年夜文件中的恣意地位举行随机存储,其代价较小。
还有就是总有人问我到底该学习什么语言,什么语言有前途,那么我的回答是不论是C,C++,java,.net,ruby,asp或是其他语言都可以学,编程的关键不是语言,而是思想。 《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想) 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 是一种语言,用以产生「小应用程序(Applet(s)) Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
页:
[1]