[一]FileDescriptor文件描述符 标准输入输出错误 文件描述符
文件描述符
|
文件描述符 之于文件系统(操作系统中的一切都是文件描述符 可以使用文件描述符描述任何一个资源对象
就如同Class 之于java语言一样(java中一切都是类,都是一个Class的实例,任何一个类都用Class对象的实例来描述
|
|
文件描述符类的实例用作与基础机器有关的某种结构的不透明句柄
该结构表示开放文件、开放套接字或者字节的另一个源或接收者。
文件描述符的主要实际用途是创建一个包含该结构的 FileInputStream 或 FileOutputStream。
应用程序不应创建自己的文件描述符。
|
FileDescriptor中的三个描述符
|
三个描述符,通过调用私有方法 standardStream进行创建初始化
创建一个FileDescriptor 并且,设置他的handle值
内部的set(fd)是一个本地方法
说白了,就是通过调用本地方法,获得操作系统对标准输入/输出/错误的三个文件描述符
|
| 注释中也说的很清楚,文件描述符一般不直接使用 通过使用System.in System.out System.err |
文件描述符在System类中的应用
|
在System 中 in out err 都是 final static的
|
|
标准的输入输出是共享,但是java是多线程的
因此它们必须受到特别的处理,在系统初始化完成之前,线程严禁使用这几个特殊对象;
又因为这些对象都是静态的,因此java的类加载机制会在System类加载的时候就会初始化,这就造成了一对矛盾;
为解决这对矛盾,System在加载是将它们初始化为null,等加在完成后,通过 initializeSystemClass
|
|
initializeSystemClass 方法的关键部位 以及 本地的setIn0 setOut0 setErr0
|
|
initializeSystemClass 方法对于这块来说,主要就是
使用三个文件描述符 创建了 FileInputStream 以及 FileOutputStream
对于Out以及Err又根据encoding 转换为PrintStream
然后通过本地方法进行设置
|
| 所以说,那三个专门的文件描述符一般不直接使用 取而代之的则是使用文件描述符 初始化设置过的流对象 |
|
应用程序不创建文件描述符, 都是由系统调用, 也就是本地方法来操作的
应用程序只是获得, 然后使用, 所谓使用,最终也还是需要借助于操作系统
是应用程序 操作文件 时 与操作系统进行交互时,必须的数据项
|
[一]FileDescriptor文件描述符 标准输入输出错误 文件描述符的更多相关文章
- Python基础笔记系列十一:标准输入输出、文件读写和指针等操作
本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! 标准输入输出一.输入 在sublime中这个时候需要安装SublimeRE ...
- linux标准输入输出错误输出
Linux Shell 环境中支持输入输出重定向,用符号"<"和">"来表示.0.1和2分别表示标准输入.标准输出和标准错误信息输出,可以用来指定需 ...
- flockfile, ftrylockfile, funlockfile - 为标准输入输出锁定文件 FILE
SYNOPSIS 总览 #include <stdio.h> void flockfile(FILE *filehandle); int ftrylockfile(FILE *fileha ...
- NPOI-Excel系列-1000.创建一个标准的Excel文件
using NPOI.HSSF.UserModel; using Microsoft.VisualStudio.TestTools.UnitTesting; using System.IO; name ...
- ARM 之一 ELF文件、镜像(Image)文件、可执行文件、对象文件 详解
[转]https://blog.csdn.net/ZCShouCSDN/article/details/100048461 ELF 文件规范 ELF(Executable and Linking ...
- Linux 标准输入输出、错误输出、重定向标准输出
再来看看 >& 操作符: 重定向操作符 描述 > 将命令输出写入到文件或设备(如打印机),而不是命令提示符窗口或句柄. < 从文件而不是从键盘或句柄读入命令输入. >& ...
- [svc]linux中的文件描述符(file descriptor)和文件
linux中的文件描述符(file descriptor)和文件 linux为了实现一切皆文件的设计哲学,不仅将数据抽象成了文件,也将一切操作和资源抽象成了文件,比如说硬件设备,socket,磁盘,进 ...
- linux标准输入输出及错误输出
Linux Shell 环境中支持输入输出重定向,用符号"<"和">"来表示. 0.1和2分别表示标准输入.标准输出和标准错误信息输出,可以用来指定 ...
- [C++STDlib基础]关于C标准输入输出的操作——C++标准库头文件<cstdio>
网上实例 总结 /* _STD_BEGIN using _CSTD clearerr; using _CSTD fclose; using _CSTD feof; using _CSTD ferror ...
随机推荐
- shell基础及变量
一 Shell概述 1.Shell的作用——命令解释器,“翻译官” shell作为一个人机接口,用于解释用户输入的命令,将命令解释为Linux内核可以执行的2进制代码,并将执行的结果返回在标准终端上. ...
- react-router路由地址变了页面却没有跳转的解决办法
最近,自己在摸索react的时候,遇到一个很奇葩的问题,大概是这样的: 我从列表页使用Link跳转到详情页面,列表页面的路由是'/list',详情页面的路由是'/list/detail',由于详情页面 ...
- 微信网页悬浮窗交互效果的web实现
一.微信的悬浮窗交互效果 微信更新后,发现多了个悬浮窗功能.公众号阅读,网页浏览回退后默认会出现.再点击,可以回到刚才阅读的地方.于是,再也不会遇到回复老婆的信息,再切换回来重新找刚才阅读东西的麻烦了 ...
- MangoDb的安装及使用
安装步骤 一.创建文件 vi /etc/yum.repos.d/mongodb-org-3.6.repo 二.配置文件内容 [mongodb-org-3.6] name=MongoDB Reposit ...
- 显存充足,但是却出现CUDA error:out of memory错误
之前一开始以为是cuda和cudnn安装错误导致的,所以重装了,但是后来发现重装也出错了. 后来重装后的用了一会也出现了问题.确定其实是Tensorflow和pytorch冲突导致的,因为我发现当我同 ...
- ABP入门系列(3)——领域层定义仓储并实现
ABP入门系列目录--学习Abp框架之实操演练 一.先来介绍下仓储 仓储(Repository): 仓储用来操作数据库进行数据存取.仓储接口在领域层定义,而仓储的实现类应该写在基础设施层. 在ABP中 ...
- [Swift]LeetCode474. 一和零 | Ones and Zeroes
In the computer world, use restricted resource you have to generate maximum benefit is what we alway ...
- [Swift]LeetCode530. 二叉搜索树的最小绝对差 | Minimum Absolute Difference in BST
Given a binary search tree with non-negative values, find the minimum absolute difference between va ...
- [Swift]LeetCode609. 在系统中查找重复文件 | Find Duplicate File in System
Given a list of directory info including directory path, and all the files with contents in this dir ...
- awk小例子_2_数值统计脚本
通信公司工作,经常处理各种协议接口,在统计协议接口字段内容时,需要统计字段填写的内容是否正确,和占比是多少.要是单次统计,估计会把人累死,写个脚本统计,轻松便捷. 举例:接口内容 这是一条话单,这样的 ...