标准I/O
1
、标准I/O:参照Unix中“程序所使用的单一信息流”的概念,程序的输入都可以来自于标准输入,程序输出都可以发送到标准输出,所有的错误信息都可以发送到标准错误;
标准I/O的意义在于:
可以把程序串联起来,使一个程序的标准输出可以成为另一个程序的标准输入;
2、Java提供了
System.in、System.out、Sytem.err支持标准I/O模型;
3、
System.out、System.err被包装为PrintStream;
System.in是一个没有被包装过的InputStream;
这意味着,可以直接使用前两者,而后者要包装后才可以使用;
①包装System.in
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
//Scanner stdin = new Scanner(System.in); //Scanner有便捷的包装构造方法;
String s;
while((s = stdin.readine())!= null && s.length != 0)
System.out.println(s);
②将System.out装换为PrintWriter
PrintWriter out = new PrintWriter(System.out,true); //true:println、print、format方法将自动刷新缓冲流;
out.println("Hello world!");
4、重定向标准I/O
System.setIn(InputStream):
System.setOut(PrintStream);
System.setErr(PrintStream);
示例代码:
BufferedInputStream in = new BufferedInputStream(new FileInputStream("demo.java"));
PrintStream out = new PrintStream(new BufferedOutputStream(new FileOutputStream("tesOUt.out")));
PrintStream console = System.out; //对控制台标准输出进行标注
System.setIn(in); //后面可以使用Scanenr等对System.in进行读取操作(适用于读取大量测试数据)
System.setOUt(out);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s;
while((s = br.readLine())!= null)
System.out.printlns(s);
out.close();
in.close();
System.setOut(console); //恢复标准输出到控制台;
//在以上代码中,System.in、System.out实际充当了一个数据流的中转站;