JAVA编程:调剂JavaTM 的I/O功能(四)(zt)
Java的桌面程序开发在java程序员里通常叫swing开发,主要用的swing包里的类开发的,也就是通常说的c/s架构开发功能第二个程序比第一个约莫快20%,价值是不能不写一些技能性的底层代码。StreamTokenizer是一个杂和的类,由于它从基于字符的流中读取(象BufferedReader)数据,但同时又以字节进行操纵,即只管它们是字母,也要用两字节的值来处置一切的字符(年夜于0xff)。
序列化
序列化利用一个尺度格局,将恣意一个Java数据布局转换为字撙节。比方,以下程序输入一个随机的整数数组:
importjava.io.*;
importjava.util.*;
publicclassserial1{
publicstaticvoidmain(Stringargs[]){
ArrayListal=newArrayList();
Randomrn=newRandom();
finalintN=100000;
for(inti=1;i<=N;i++)
al.add(newInteger(rn.nextInt()));
try{
FileOutputStreamfos=
newFileOutputStream("test.ser");
BufferedOutputStreambos=
newBufferedOutputStream(fos);
ObjectOutputStreamoos=
newObjectOutputStream(bos);
oos.writeObject(al);
oos.close();
}
catch(Throwablee){
System.err.println(e);
}
}
}
而上面的程序又将该数组从头读进:
importjava.io.*;
importjava.util.*;
publicclassserial2{
publicstaticvoidmain(Stringargs[]){
ArrayListal=null;
try{
FileInputStreamfis=
newFileInputStream("test.ser");
BufferedInputStreambis=
newBufferedInputStream(fis);
ObjectInputStreamois=
newObjectInputStream(bis);
al=(ArrayList)ois.readObject();
ois.close();
}
catch(Throwablee){
System.err.println(e);
}
}
}
请注重我们利用了缓冲手艺来减速I/O操纵。
这里是不是存在比序列化更快的办法来输入年夜容量的数据,然后又读取返来?除极一般的例子外,大概没有。比方,假定您必要以文本情势输入一个64位长的整数,而不是8字节的汇合。作为文本情势的一个长整数的最年夜长度约莫是20个字符,也就是二进制暗示的2.5倍。因而,看上往这类格局仿佛不成能更快。但是,在某些情形下,比方位图,一种特定的格局多是一种改善的办法。但是,利用本人的计划会与序列化供应的尺度相抵触,因而,如许做不能不触及一些衡量。
除序列化(接纳DataInputStream和DataOutputStream)实践的I/O和格局化开支外,另有其他价值,比方,当解除序列化时必要创立新的对象。
请注重DataOutputStream的办法大概被用来开辟半定制(semi-custom)的数据格局,比方:
importjava.io.*;
importjava.util.*;
publicclassbinary1{
publicstaticvoidmain(Stringargs[]){
try{
FileOutputStreamfos=
newFileOutputStream("outdata");
BufferedOutputStreambos=
newBufferedOutputStream(fos);
DataOutputStreamdos=
newDataOutputStream(bos);
Randomrn=newRandom();
finalintN=10;
dos.writeInt(N);
for(inti=1;i<=N;i++){
intr=rn.nextInt();
System.out.println(r);
dos.writeInt(r);
}
dos.close();
}
catch(IOExceptione){
System.err.println(e);
}
}
}
和:
importjava.io.*;
publicclassbinary2{
publicstaticvoidmain(Stringargs[]){
try{
FileInputStreamfis=
newFileInputStream("outdata");
BufferedInputStreambis=
newBufferedInputStream(fis);
DataInputStreamdis=
newDataInputStream(bis);
intN=dis.readInt();
for(inti=1;i<=N;i++){
intr=dis.readInt();
System.out.println(r);
}
dis.close();
}
catch(IOExceptione){
System.err.println(e);
}
}
}
这些程序向文件写进10个整数,然后读出。
猎取文件信息
到今朝为止,会商仅触及对单个文件的输出和输入。可是,还存在减速I/O功能的另外一方面,这与查找文件属性有关。比方,思索一个打印文件长度的小程序:
importjava.io.*;
publicclasslength1{
publicstaticvoidmain(Stringargs[]){
if(args.length!=1){
System.err.println("missingfilename");
System.exit(1);
}
Filef=newFile(args);
longlen=f.length();
System.out.println(len);
}
}
Java运转时体系本身是没法晓得文件长度的,因此必需扣问底层操纵体系以取得相干信息。关于其他文件信息也是云云,比方文件是不是是一个目次,最初修正工夫等等。在java.io包中的File类供应了一套查询这些信息的办法。如许的查询一般在必要很长的工夫,因而应当只管罕用。
查询文件信息的一个较长的例子是从文件体系的根目次入手下手举行递回遍历,以输入体系中一切的文件及其路径,该例子看上往象如许:
importjava.io.*;
publicclassroots{
publicstaticvoidvisit(Filef){
System.out.println(f);
}
publicstaticvoidwalk(Filef){
visit(f);
if(f.isDirectory()){
Stringlist[]=f.list();
for(inti=0;i<list.length;i++)
walk(newFile(f,list));
}
}
publicstaticvoidmain(Stringargs[]){
Filelist[]=File.listRoots();
for(inti=0;i<list.length;i++){
if(list.exists())
walk(list);
else
System.err.println("notaccessible:"
+list);
}
}
}
这个例子利用了File类的办法,比方isDirectory和exists,来遍历目次布局。每一个文件按照其范例(一般文件或目次)仅被查询一次。
更多的信息
站点:
JavatmI/OPerformanceTuning
举例申明了进步I/O功能的一些办法。部分手艺与在下面所提到的对照类似,其他的则触及究竟层处置成绩。
DonKnuth的著作,TheArtofComputerProgramming,第3卷,会商了内部排序和搜刮算法,比方对B-树的利用。
你说是sun公司对她研究的透还是微软?针对自己工具开发的.net性能上肯定会站上风的。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 是一种将安全性(Security)列为第一优先考虑的语言 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。 是一种为 Internet发展的计算机语言 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。 关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 Java 编程语言的风格十分接近C、C++语言。 你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。 是一种语言,用以产生「小应用程序(Applet(s)) 让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。 应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
页:
[1]
2