今天在做测试的时候发现为了醒目用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。
文件描述符是由无符号整数表示的句柄,进程使用它来标识打开的文件。文件描述符与包括相关信息(如文件的打开模式、文件的位置类型、文件的初始类型等)的文件对象相关联,这些信息被称作文件的上下文。
分享到:
相关推荐
下面小编就为大家带来一篇java基础(System.err和System.out)详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
ml.err ml 汇编,在Bin中,从MASM32中获取到的
安装VS2003时找不到H2INC.ERR文件问题的解决方案
ML.ERR,编译有时会用到,不知道做什么的
ML.exe ML.err H2inc.exe H2inc.err Win.inc Readme.txt Errmsg.txt Support.txt
解决SPSS Undefined error -Cannot open text file"F:\SPSS 25...\lang\en\spss.err":No such file or directory Restart the processor?
解决VS2003安装缺少h2inc.err问题,很难找的却不得不找的一个文件,鄙视ms.
re1.1.err.json
re1.2.err.json
System.out.println(rs.getString(1)); else System.out.println("totle:0"); rs.close(); stmt.close(); conn.close(); } catch (ClassNotFoundException cnfe) { System.err.println("Unable to...
System.out.println("私钥签名:" + sign); boolean status = CertificateUtils.verifySign(data.getBytes("utf-8"), sign, certificatePath); System.err.println("公钥验签结果:" + status); // 公钥...
windows xp 安装OpenSSL时要用到的文件: ml.exe 8.0.50727.42 ML.ERR,编译有时错误数据表 nasm.exe由著名的asmcommunity团队维护 网站上还包括一个asm开源的OS代码 大部分代码都是nasm编译polink连接的
System.out.println("结果:" + resultEntity.getResult() + "|状态:" + resultEntity.getStatusCode()); } else { System.err.println("执行出错了-->" + resultEntity.getErrorMsg()); } } else ...
System.err.println("web项目的启动{}"); } @Override public void contextDestroyed(ServletContextEvent sce) { log.info("web项目的关闭{}........................."); System.err.println("web...
System.err.println("Data.executeQuery: " +e.getMessage()); } } public ResultSet queryResult(String querySql) //执行查询 { results = null; try { state=conn.createStatement...
摘自支付宝官方 java sdk 2018.01.04,需要的同学直接下载。
System.out.print("ping"); } static void pong() { System.out.print("pong"); } A. pingpong B. pongping C. pingpong和pongping都有可能 D. 都不输出 3、0.6332的数据类型是() A float B double C Float D ...
3weewewe
System.out.println("Key = |" + bintohex(kp.getEncoded()) + "|"); } catch (Exception e) { System.err.println("Key generation failed" + e); } return kp; } // readkey() // make binary ...
System.err.println("Data.executeQuery: " +e.getMessage()); } } public ResultSet queryResult(String query) { results = null; try { state=conn.createStatement(ResultSet.TYPE_...