JAVA标准I/0详解

本文详细介绍了JAVA中的标准输入输出System.in、System.out和System.err,包括它们的源码、使用方法以及如何使用Scanner包装System.in。此外,还讲解了System.out与System.err的区别,特别是System.err用于错误输出的特性。最后,讨论了重定向概念,通过System类的setIn、setOut和setErr方法实现输入输出到文件,以构建日志系统。
摘要由CSDN通过智能技术生成

     在JAVA的类库java.lang中我们经常用到System类的System.in,,System.out这种控制台输入输出,这就是所谓的标准流。本文试着对标准I/0做一个比较详细的说明。

标准I/0源码

      JAVA里面提供了3中标准I/0模型,即System.in,System.out,System.err。我们先看看这几种模型的源码:

      

public final static InputStream in = nullInputStream();  
public final static PrintStream out = nullPrintStream();  
public final static PrintStream err = nullPrintStream();  
      他们都是静态属性的字段,因此能直接用System类直接调用,这些字段实际上 private static void initializeSystemClass()中初始化的:

private static void initializeSystemClass() {  
  
    FileInputStream fdIn = new FileInputStream(FileDescriptor.in);  
    FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);  
    FileOutputStream fdErr = new FileOutputStream(FileDescriptor.err);  
    setIn0(new BufferedInputStream(fdIn));  
    setOut0(new PrintStream(new BufferedOutputStream(fdOut, 128), true));  
    setErr0(new PrintStream(new BufferedOutputStream(fdErr, 128), true));  
  
}  

     FileDescriptor.out,FileDescriptor.in和FileDescriptor.err其实是 

public static final FileDescriptor in = standardStream(0);  
public static final FileDescriptor out = standardStream(1);  
public static final FileDescriptor err = standardStream(2);  

     明显可以看出它们都是标准流,即常见的控制台输入输出,这也是系统默认的输入输出。接下来看看它们的用法与区别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值