日期:2011-03-22 16:17:00 来源:本站整理
<b>一个例子</b>[Java编程]
本文“<b>一个例子</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
为体验新类的效果,下面让我们看看若何改正IOStreamDemo.java示例的呼应区域,以便利用Reader和Writer类:
大家普通瞥见的是转换历程非常直观,代码看起来也颇类似.但这些都不是重要的辨别.最重要的是,由于随机拜候文件已经改变,所以第6节未再反复.//: NewIODemo.java // Java 1.1 IO typical usage import java.io.*; public class NewIODemo { public static void main(String[] args) { try { // 1. Reading input by lines: BufferedReader in = new BufferedReader( new FileReader(args[0])); String s, s2 = new String(); while((s = in.readLine())!= null) s2 += s + "\n"; in.close(); // 1b. Reading standard input: BufferedReader stdin = new BufferedReader( new InputStreamReader(System.in)); System.out.print("Enter a line:"); System.out.println(stdin.readLine()); // 2. Input from memory StringReader in2 = new StringReader(s2); int c; while((c = in2.read()) != -1) System.out.print((char)c); // 3. Formatted memory input try { DataInputStream in3 = new DataInputStream( // Oops: must use deprecated class: new StringBufferInputStream(s2)); while(true) System.out.print((char)in3.readByte()); } catch(EOFException e) { System.out.println("End of stream"); } // 4. Line numbering & file output try { LineNumberReader li = new LineNumberReader( new StringReader(s2)); BufferedReader in4 = new BufferedReader(li); PrintWriter out1 = new PrintWriter( new BufferedWriter( new FileWriter("IODemo.out"))); while((s = in4.readLine()) != null ) out1.println( "Line " + li.getLineNumber() + s); out1.close(); } catch(EOFException e) { System.out.println("End of stream"); } // 5. Storing & recovering data try { DataOutputStream out2 = new DataOutputStream( new BufferedOutputStream( new FileOutputStream("Data.txt"))); out2.writeDouble(3.14159); out2.writeBytes("That was pi"); out2.close(); DataInputStream in5 = new DataInputStream( new BufferedInputStream( new FileInputStream("Data.txt"))); BufferedReader in5br = new BufferedReader( new InputStreamReader(in5)); // Must use DataInputStream for data: System.out.println(in5.readDouble()); // Can now use the "proper" readLine(): System.out.println(in5br.readLine()); } catch(EOFException e) { System.out.println("End of stream"); } // 6. Reading and writing random access // files is the same as before. // (not repeated here) } catch(FileNotFoundException e) { System.out.println( "File Not Found:" + args[1]); } catch(IOException e) { System.out.println("IO Exception"); } } } ///:~
第1节收缩了一点儿,因为假定要做的全部事情就是读取行输入,那么只需求将一个FileReader封装到BufferedReader之内便可.第1b节展示了封装System.in,以便读取掌握台输入的新办法.这里的代码量增添了一些,因为System.in是一个DataInputStream,并且BufferedReader需求一个Reader参数,所以要用InputStreamReader来举行转换.
在2节,可以看到假若有一个字串,并且想从中读取数据,只需用一个StringReader替换StringBufferInputStream,剩下的代码是完好相同的.
第3节揭露了新IO流库计划中的一个错误.假若有一个字串,并且想从中读取数据,那么不能再以任何情势利用StringBufferInputStream.若编译一个触及StringBufferInputStream的代码,会得到一条“反对”消息,奉告我们不要用它.此时最好换用一个StringReader.但是,假定要象第3节这样举行格局化的内存输入,就必须利用DataInputStream——没有什么“DataReader”可以替换它——而DataInputStream很不幸地要求用到一个InputStream参数.所以我们没有挑选的余地,只好利用编译器不赞成的StringBufferInputStream类.编译器一样会发出反对信息,但我们对此束手无策(注释②).
StringReader替换StringBufferInputStream,剩下的代码是完好相同的.
②:到你目前正式利用的时刻,这个错误大概已经改正.
第4节明显是从老式数据流到新数据流的一个直接转换,没有需求分外指出的.在第5节中,我们被逼迫利用全部的老式数据流,因为DataOutputStream和DataInputStream要求用到它们,并且没有可供替换的东西.但是,编译期间不会产生任何“反对”信息.若不赞成一种数据流,普通是由于它的构建器产生了一条反抵消息,禁止我们利用整个类.但在DataInputStream的情形下,只有readLine()是不赞成利用的,因为我们最好为readLine()利用一个BufferedReader(但为其他全部格局化输入都利用一个DataInputStream).
若对比第5节和IOStreamDemo.java中的那一小节,会注意到在这个版本中,数据是在文本之前写入的.那是由于Java 1.1本身存在一个错误,以下述代码所示:
看起来,我们在对一个writeBytes()的调用之后写入的任何东西都不是可以恢复的.这是一个非常有限的错误,但愿在你读到本书的时刻已得到改正.为检测能否改正,请运行上述程序.若没有得到一个违例,并且值都能精确打印出来,就表明已经改正.//: IOBug.java // Java 1.1 (and higher?) IO Bug import java.io.*; public class IOBug { public static void main(String[] args) throws Exception { DataOutputStream out = new DataOutputStream( new BufferedOutputStream( new FileOutputStream("Data.txt"))); out.writeDouble(3.14159); out.writeBytes("That was the value of pi\n"); out.writeBytes("This is pi/2:\n"); out.writeDouble(3.14159/2); out.close(); DataInputStream in = new DataInputStream( new BufferedInputStream( new FileInputStream("Data.txt"))); BufferedReader inbr = new BufferedReader( new InputStreamReader(in)); // The doubles written BEFORE the line of text // read back correctly: System.out.println(in.readDouble()); // Read the lines of text: System.out.println(inbr.readLine()); System.out.println(inbr.readLine()); // Trying to read the doubles after the line // produces an end-of-file exception: System.out.println(in.readDouble()); } } ///:~
以上是“<b>一个例子</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
- ·上一篇文章:本身的缺陷:RandomAccessFile
- ·下一篇文章:改正数据流的行为
- ·中查找“<b>一个例子</b>”更多相关内容
- ·中查找“<b>一个例子</b>”更多相关内容
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论