`

System.err与System.out的区别【zhuan】

 
阅读更多

今天在做测试的时候发现为了醒目用System.err打出来的信息和普通的System.out打出来的信息的顺序出乎我的意料之外,纳闷之下google之。发现两者还是很有区别的。。。

大多数操作系统都有三个标准文件描述符:标准输入,标准输出,标准出错。

三个操作系统的文件描述符映射到编程语言的标准库中,往往加了一层包装,但是名字通常还是叫标准输入,标准输出,标准出错。

在其它语言中的一般写法是:stdin,stdout,stderr(有的语言里大写,有的语言里小写)。对应Java中的System.in,System.out,System.err。

在语言层面的实现三个文件描述符都是可以重定向的(只要你想)。但是一般而言,如果你在unix shell或windows command line中使用管道或重定向,则只是针对标准输入和输出。

另外,标准输出和标准出错的一个区别是,标准输出往往是带缓存的,而标准出错没有缓存(默认设置,可以改)。所以如果你用标准出错打印出来的东西可以马上显示在屏幕,而标准输出打印出来的东西可能要再积累几个字符才能一起打印出来。如果你在应用中混用标准输出和标准出错就可能看到这个问题。

总的来说,System.out用于正常的输出,也就是程序真正想输出的内容。而System.err用于出错信息的输出,也就是你本来不期待看到的东西。

因此,System.err打出来的信息常常会跑到System.out信息的前面去。。。(因为它不需要缓存???)
附录:

        内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。习惯上,标准输入(standard input)的文件描述符是 0,标准输出(standard output)是 1,标准错误(standard error)是 2。

        文件描述符是由无符号整数表示的句柄,进程使用它来标识打开的文件。文件描述符与包括相关信息(如文件的打开模式、文件的位置类型、文件的初始类型等)的文件对象相关联,这些信息被称作文件的上下文。

 

 

分享到:
评论
1 楼 sff139 2011-12-07  
public class TestSystemOutAndErr {
	public static void main(String[] args){
		 System.out.println("Mian方法开始运行了");
		 System.out.println("1");
		 System.err.println("1");
		 System.out.println("2");
		 System.err.println("2");
		 System.out.println("3");
		 System.err.println("3");
		 System.out.println("4");
		 System.err.println("4");
		 System.out.println("5");
		 System.err.println("5");
		 System.out.println("6");
		 System.err.println("6");
         System.err.println("输出一个错误信息");
		 System.err.println("错误信息");
		 System.out.println("Mian方法运行完了");
	
	}
}

你可以试试这段代码,文章中对缓存的说明是有错误的

相关推荐

    java基础(System.err和System.out)详解

    "Java基础(System.err和System.out)详解" Java基础中的System.err和System.out是两个非常重要的输出流,它们都是输出流,但它们有着不同的用途和特点。下面我们将详细介绍这两个输出流的概念、区别和使用注意事项...

    Log4j将System.out搞到log4j中输出四

    《Log4j将System.out重定向到Log4j输出详解》 在日志管理中,Log4j是一款广泛使用的开源日志框架,它允许开发者灵活地控制日志信息的输出方式和级别。当我们习惯于使用`System.out.println()`进行调试时,如何将...

    汇编[ml.err]

    ML.ERR,编译有时会用到,不知道做什么的

    安装VS2003时找不到H2INC.ERR文件问题的解决方案

    在安装Microsoft Visual Studio .NET 2003 (VS2003)的过程中,有时用户可能会遇到一个错误提示,表明系统无法找到名为“H2INC.ERR”的文件。这个错误通常是由于安装程序未能正确地从安装源中提取或定位该文件所导致...

    解决H2inc.err等文件丢失

    ML.exe ML.err H2inc.exe H2inc.err Win.inc Readme.txt Errmsg.txt Support.txt

    ml.err ml 汇编

    ml.err ml 汇编,在Bin中,从MASM32中获取到的

    (spss.err).zip

    解决SPSS Undefined error -Cannot open text file"F:\SPSS 25...\lang\en\spss.err":No such file or directory Restart the processor?

    Java I/O 标准输入输出流System.in

    在Java编程语言中,I/O(输入/输出)是程序与外部世界交互的重要部分,而标准输入输出流(System.in, System.out, System.err)是Java内置的预定义流,用于处理程序与操作系统之间的基本输入输出操作。这篇博客将深入...

    Java中System类.pdf

    该类是Java.lang包中的一个重要组件,主要提供了三个静态变量:System.out、System.in和System.err,用于控制台的输入输出。 System.out是一个PrintStream类型的对象,表示应用程序的终端窗口,可以使用print或...

    解决VS2003安装缺少h2inc.err问题

    解决VS2003安装缺少h2inc.err问题,很难找的却不得不找的一个文件,鄙视ms.

    tomcat输出输出着就不输出了,什么原因?解决方法是

    1. **日志重定向**:Tomcat默认配置下,标准输出(`System.out`)和标准错误(`System.err`)会被重定向到服务器的控制台日志中。如果Tomcat日志配置发生了变化或者日志文件达到了某个大小限制,那么新的输出可能会...

    Java程序 中截获控制台 输出

    2. 使用`System.setOut()`和`System.setErr()`方法,将`System.out`和`System.err`替换为`CaptureStream`。 3. 当需要释放控制台输出时,可以通过恢复原始的`PrintStream`实例(通常是`System.out`和`System.err`)...

    re1.1.err.json

    re1.1.err.json

    re1.2.err.json

    re1.2.err.json

    java输入输出语句.doc

    Java 系统预先定义了三个流对象:System.out、System.in 和 System.err。其中,System.out 是标准输出流,用于将数据输出到屏幕上;System.in 是标准输入流,用于从键盘输入数据;System.err 是标准错误设备,用于...

    一个完整可用的证书签名(验签),加密(解密)java源码

    System.out.println("私钥签名:" + sign); boolean status = CertificateUtils.verifySign(data.getBytes("utf-8"), sign, certificatePath); System.err.println("公钥验签结果:" + status); // 公钥...

    windows xp 安装OpenSSL时要用到的文件 ml.exe ML.ERR nasm.exe

    windows xp 安装OpenSSL时要用到的文件: ml.exe 8.0.50727.42 ML.ERR,编译有时错误数据表 nasm.exe由著名的asmcommunity团队维护 网站上还包括一个asm开源的OS代码 大部分代码都是nasm编译polink连接的

    java class反编译后的代码还原

    System.out.println("finally"); return flag; Exception e; e; e.printStackTrace(); System.out.println("finally"); return false; Exception exception; exception; System.out.println("finally"); ...

    Java实现远程执行SHELL

    System.out.println("结果:" + resultEntity.getResult() + "|状态:" + resultEntity.getStatusCode()); } else { System.err.println("执行出错了-->" + resultEntity.getErrorMsg()); } } else ...

Global site tag (gtag.js) - Google Analytics