Java 标准I/O

原创 2007年10月14日 23:26:00

按照标准I/O模型,Java 提供了 System.in、System.out 和 System.err。
其中 System.out 已经事先被包装成了 PrintStream 对象。 System.err 同样
也是 PrintStream,但 System.in 却是一个没有被包装过的未经加工的 InputStream。
这意味着尽管我们可以立即使用 System.out 和 System.err,但是在读取 System.in
之前必须对其进行包装。
(1)从标准输入读取
 BufferedReader in = new BufferedReader(
  new InputStreamReader(System.in) );
 String s;
 while( ( ( s = in.readLine() ) != null ) && ( s.length() != 0 ) ) {
  System.out.println(s);
 }
 
(2)将 System.out 转换成 PrintWriter
System.out 是一个 PrintStream, 而 PrintStream 是一个 OutputStream。 PrintWriter
有一个可以接受 OutputStream 作为参数的构造器。因此,只要需要,就可以使用那个构造器把
System.out 转换成 PrintWriter:
 PrintWriter out = new PrintWriter( System.out, true );
 out.println("Hello, world");
 
重要的是使用有两个参数的 PrintWriter 的构造器,并将第二个参数设为 true, 以便开启自动清空
功能;否则,你可能看不到输出。

(3)标准I/O重定向
Java 的 System 类提供了一些简单的静态方法调用,以允许我们对标准输入、输出和错误I/O流进行重定向:
setIn(InputStream)
setOut(OutputStream)
setErr(OutputStream)
 
 PrintStream console = System.out;
 BufferedInputStream in = new BufferedInputStream(
  new FileInputStream("Redirecting.java") );
 PrintStream out = new PrintStream(
  new FileOutputStream("test.out") );
 System.setIn(in);
 System.setOut(out);
 System.setErr(out);
 BufferedReader br = new BufferedReader(
  new InputStreamReader(System.in) );
 String s;
 while( ( s = br.readLine() ) != null ) {
  System.out.println(s);
 }
 out.close(); // Remember this!
 System.setOut(console);
I/O重定向操纵的是字节流,而不是字符流;因此我们使用的是 InputStream 和
OutputStream,而不是 Reader 和 Writer。

 

文件I/O和标准I/O的区别

一、先来了解下什么是文件I/O和标准I/O: 文件I/O:文件I/O称之为不带缓存的IO(unbuffered I/O)。不带缓存指的是每个read,write都调用内核中的一个系统调用。也就是一般所...
  • zqixiao_09
  • zqixiao_09
  • 2016年01月01日 10:12
  • 2341

C语言标准I/O函数及其特点总结

C语言的标准I/O库通过系统调用同内核打交道,内核通过驱动和硬件打交道。由于CPU要处理很多任务,所以和低速的I/O的交互一般要经过中间的缓存。    标准I/O库有几个常用函数,虽然很常见,但是其...
  • a1510685338
  • a1510685338
  • 2015年03月16日 20:24
  • 1281

底层文件I/O和ANSI标准I/O的区别

一、先来了解下什么是文件I/O和标准I/O: 文件I/O:文件I/O称之为不带缓存的IO(unbuffered I/O)。不带缓存指的是每个read,write都调用内核中的一个系统调用。也就是...
  • owen7500
  • owen7500
  • 2016年11月21日 20:45
  • 764

C++流之标准I/O流

1、什么是标准I/O? 2、标准I/O的类的继承关系是什么? 3、ios类中几个常用的枚举类是什么? 4、ios类中的成员函数有哪些? 5、什么是格式控制符?...
  • dingyanxxx
  • dingyanxxx
  • 2015年08月09日 20:51
  • 802

五种I/O,select

一个输入操作通常包括两个不同的阶段: 1,等待数据准备好: 2,从内核中向进程复制数据: 对于一个套接字上的输入操作: 1,等待数据从网络中到达。当所有的等待分组到达时,它被复制到内核中的某个缓冲区。...
  • msdnwolaile
  • msdnwolaile
  • 2016年07月15日 09:49
  • 901

浅谈标准I/O缓冲区

转自:http://blog.csdn.net/tennysonsky/article/details/43490985 标准I/O库提供缓冲的目的是尽可能地减少使用read和write调用的...
  • lianghe_work
  • lianghe_work
  • 2015年06月23日 09:35
  • 1151

apue学习第九天——标准I/O库(第五章)

这是第五章标准I/O库的内容,花了几个小时浏览了一遍。感觉这些东西在第一遍看的时候没必要太抠细节,用到的时候再查,所以下面只是简单记录,好啦,开始。 首先,给stream一个系统的定义:In...
  • BlitzSkies
  • BlitzSkies
  • 2015年01月05日 20:28
  • 723

Linux - 标准I/O库与高级I/O库

输入字符头文件 #include 函数原型 int fgetc(FILE *fp); 从文件流中读取下一个字节,并作为字符返回 到达文件尾或出现错误时,返回EOF int getc(FILE *fp...
  • wangzi11322
  • wangzi11322
  • 2015年05月13日 14:28
  • 969

《JAVA I/O最详解》

刚开始学Java时候,一直搞不懂Java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂。而且没有结合到java7 的最新技术,所以自己结合API来整理一下,有错的话请指正,...
  • self_realian
  • self_realian
  • 2016年07月19日 17:31
  • 1789

【linux系统编程】C标准I/O函数和系统无缓冲函数(Unbuffered I/O函数)关系

先接收一下,本文章主要内容: 1.C标准I/O函数和系统无缓冲函数(Unbuffered I/O函数)关系; 2.I\O函数:buffer && unbuffer; 开始前,我们要清楚linux...
  • jyb_haha
  • jyb_haha
  • 2013年07月24日 18:32
  • 1167
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java 标准I/O
举报原因:
原因补充:

(最多只允许输入30个字)