从尺度输入中读取数据
以Unix首先建议的“尺度输入”、“尺度输出”以及“尺度错误输出”观念为基本,Java提供了相应的System.in,System.out以及System.err。贯这一整本书,各人城市打仗到如何用System.out举办尺度输出,它已预封装成一个PrintStream工具。System.err同样是一个PrintStream,但System.in是一个原始的InputStream,未举办任何封装处理惩罚。这意味着尽量能直接利用System.out和System.err,但必需事先封装System.in,不然不能从中读取数据。
典范环境下,我们但愿用readLine()每次读取一行输入信息,所以需要将System.in封装到一个DataInputStream中。这是Java 1.0举办行输入时采纳的“老”步伐。在本章稍后,各人还会看到Java 1.1的办理方案。下面是个简朴的例子,浸染是回应我们键入的每一行内容:
//: Echo.java // How to read from standard input import java.io.*; public class Echo { public static void main(String[] args) { DataInputStream in = new DataInputStream( new BufferedInputStream(System.in)); String s; try { while((s = in.readLine()).length() != 0) System.out.println(s); // An empty line terminates the program } catch(IOException e) { e.printStackTrace(); } } } ///:~
之所以要利用try块,是由于readLine()大概“掷”出一个IOException。留意同其他大大都流一样,也应对System.in举办缓冲。
由于在每个措施中都要将System.in封装到一个DataInputStream内,所以显得有点不利便。但回收这种设计方案,可以得到最大的机动性。