System.setOut()重定向输出解释
static void test04() throws FileNotFoundException {/* FileOutputStream(FileDescriptor fdObj)创建一个向指定文件描述符处写入数据的输出文件流,该文件描述符表示一个到文件系统中的某个实际文件的现有连接。*///将系统的输出流设置为标准输出流 FileDescriptor.out 系统的输出流
//系统的println(是同步的方法)System.setOut(new PrintStream(new FileOutputStream("d:/test/outout.txt"),false));System.out.println("出去拉");System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out),false));System.out.println("haha系统输出");
}
有几个问题
1、System类加载之后out对象是怎么设置为FileDescriptor.out的
2、为什么对于final对象 可以调用static void setOut(PrintStream out) 修改
native 底层是怎么样的
由于java是支持多线程的,所以标准的输入输出是共享,因此它们必须受到特别的处理,在系统初始化完成之前,线程严禁使用这几个特殊对象;又因为这些对象都是静态的,因此java的类加载机制会在System类加载的时候就会初始化,这就造成了一对矛盾;为解决这对矛盾,System在加载是将它们初始化为null,等加在完成后,通过native方法在对它们进行赋值:
在线程初始化完成后,系统会调用方法initializeSystemClass设置这几个特殊对象的值:
......FileInputStream fdIn = new FileInputStream(FileDescriptor.in);FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);FileOutputStream fdErr = new FileOutputStream(FileDescriptor.err);setIn0(new BufferedInputStream(fdIn));setOut0(newPrintStream(fdOut, props.getProperty("sun.stdout.encoding")));setErr0(newPrintStream(fdErr, props.getProperty("sun.stderr.encoding")));
......
System.setOut()重定向输出解释相关推荐
- System.setOut 重定向 memcached 的输出
System.setOut 重定向 memcached 的输出 调用 memcached 的方法 pool = SockIOPool.getInstance(poolName); 此代码并未抛出异常, ...
- System.setOut(ps)重定义了输出流后,如何重定向控制台输出
可以用 System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out))); 重新定位到标准输出流
- 用System中System.setOut()方法修改输出方式
方法:重写PrintStream里的println方法 public static void main(String[] args) throws FileNotFoundException {i ...
- Java重定向输出输入错误流实现程序日志
调用系统类中的放样()方法改变输出流 放样方法 用于重新分配系统类的标准输出流 声明方法如下: public static void setOut(PrintStreaam out) 实例1:创建Re ...
- 深入理解虚拟机实战:修改class文件实现System标准输出重定向
一.背景 在深入理解Java虚拟机的过程中,理解java程序在虚拟机层次如何执行十分重要.了解了深层次的东西,才可以实现一般情况下做不到的特殊功能,而这种特殊功能面向的对象往往是程序员本身.下面我们通 ...
- 真·浅谈System.setOut()
java中我们熟悉的输出System.out.println()只能将数据输出到控制台上,那么我们像要将数据输出到背的地方时该怎么办? System.setOut()来了. System.out是 S ...
- PrintStream和System.setOut(PrintStream ps)用法
PrintStream:为其他输出流添加了功能,是他们能够方便的打印各种数据值的表现形式. 1. 永远不会抛出IOException,异常情况可通过checkError()方法测试的内部结构: 2. ...
- Java使用System.setOut()对输出流进行重新分配
setOut: 改变输出流 public class App {public static void main(String[] args) throws FileNotFoundException ...
- 【linux笔记】vi和vim编辑器,重定向输出,系统命令,进程,管道
vi/vim 在linux下一般使用vi编辑器来编辑文件 Vi既可以查看文件也可以编辑文件. 三种模式: 命令行.插入.底行模式 切换到命令行模式:ESC键 切换到插入模式:按i,o,a键 切换到底行 ...
最新文章
- python3.6.5安装-Ubuntu16.04安装python3.6.5详细步骤
- 昨日之我,今日之我与明日之我
- Nagios(页面)报错: Return code of 13 is out of bounds
- android computescroll_Android问题:自定义ViewGroup,重载computeScroll()方法有什么用?...
- Cortex M3存储器映射
- 北京环球度假区:尚未发布票务信息,未面向公众销售任何门票
- IC设计常用文件及格式介绍
- DevOps 火爆,要学这么多技术!
- jquery选择器从认识到使用初级篇
- 视频不显示的分析方法
- Spring Cloud Hystrix Dashboard仪表盘 和 Turbine集群监控 (学习总结)
- English trip V2 - 9 People and Places Teacher:Julia Key: at on in
- 柔性电子综述2014:Wearable Electronics and Smart Textiles 可穿戴电子设备
- [生存志] 第142节 韩赵陈郑燕辽
- Excel合并计算和分类汇总
- vue实现七天免登录(cookie)
- 如何解除病毒对各种杀毒软件的劫持
- 上班一个月挣10万,居然全靠它...
- http状态码查询表(转载)
- 重载和重写的区别是什么