FileDescriptor
2016-03-26 12:19
281 查看
FileDescriptor 在java中的java.io包下面
官方的解释:
文件描述符类的实例用作与基础机器有关的某种结构的不透明句柄,该结构表示开放文件、开放套接字或者字节的另一个源或接收者。文件描述符的主要实际用途是创建一个包含该结构的
一坨~~~看不明白~
在wiki中的描述
是一个用于表述指向文件的引用的抽象化概念。在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统。
基于上面filedescriptor在java中,是当应用程序打开一个文件或者建立一个socket连接的时候,内核返回给应用程序一个非负的整数(In,out,err,分别为0,1,2),使用这个称之为filedescriptor的东西来实现对文件或者socket的操作。
【一网友的解释】【赞】打开文件或者socket之后给你一个fd,然后你可以拿着fd去操作文件或者socket,也可以把这个fd做为参数传来传去。你不能把文件或者socket“本身”作为一个参数传给一个函数吧,传fd就可以,因为它就是一个类似指针的东西。函数里面就根据这个fd对这同一个文件或者已经建立的socket连接进行操作。
之所以socket和文件都有fd的原因是都可以在上面做打开,关闭,读,写等等操作。
在获取了filedescriptor之后,可以对文件或socket的操作:
in, out, err介绍
(01) in -- 标准输入(键盘)的描述符
(02) out -- 标准输出(屏幕)的描述符
(03) err -- 标准错误输出(屏幕)的描述符
它们3个的原理和用法都类似,下面我们通过out来进行深入研究。
out 的作用和原理
out是标准输出(屏幕)的描述符。但是它有什么作用呢?
我们可以通俗理解,out就代表了标准输出(屏幕)。若我们要输出信息到屏幕上,即可通过out来进行操作;但是,out又没有提供输出信息到屏幕的接口(因为out本质是FileDescriptor对象,而FileDescriptor没有输出接口)。怎么办呢?
很简单,我们创建out对应的“输出流对象”,然后通过“输出流”的write()等输出接口就可以将信息输出到屏幕上。如下代码:
执行上面的程序之后会在屏幕上打印出hello。但是为了方便我们操作,java早已经帮我们完成了操作的封装,通过System.out.println("hello")。
【参考】http://www.fengfly.com/plus/view-214059-1.html
https://ruby-china.org/topics/161
https://zh.wikipedia.org/wiki/%E6%96%87%E4%BB%B6%E6%8F%8F%E8%BF%B0%E7%AC%A6
public final class FileDescriptor { 。。。 }
官方的解释:
文件描述符类的实例用作与基础机器有关的某种结构的不透明句柄,该结构表示开放文件、开放套接字或者字节的另一个源或接收者。文件描述符的主要实际用途是创建一个包含该结构的
FileInputStream或
FileOutputStream。
一坨~~~看不明白~
在wiki中的描述
是一个用于表述指向文件的引用的抽象化概念。在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统。
基于上面filedescriptor在java中,是当应用程序打开一个文件或者建立一个socket连接的时候,内核返回给应用程序一个非负的整数(In,out,err,分别为0,1,2),使用这个称之为filedescriptor的东西来实现对文件或者socket的操作。
【一网友的解释】【赞】打开文件或者socket之后给你一个fd,然后你可以拿着fd去操作文件或者socket,也可以把这个fd做为参数传来传去。你不能把文件或者socket“本身”作为一个参数传给一个函数吧,传fd就可以,因为它就是一个类似指针的东西。函数里面就根据这个fd对这同一个文件或者已经建立的socket连接进行操作。
之所以socket和文件都有fd的原因是都可以在上面做打开,关闭,读,写等等操作。
在获取了filedescriptor之后,可以对文件或socket的操作:
in, out, err介绍
(01) in -- 标准输入(键盘)的描述符
(02) out -- 标准输出(屏幕)的描述符
(03) err -- 标准错误输出(屏幕)的描述符
它们3个的原理和用法都类似,下面我们通过out来进行深入研究。
out 的作用和原理
out是标准输出(屏幕)的描述符。但是它有什么作用呢?
我们可以通俗理解,out就代表了标准输出(屏幕)。若我们要输出信息到屏幕上,即可通过out来进行操作;但是,out又没有提供输出信息到屏幕的接口(因为out本质是FileDescriptor对象,而FileDescriptor没有输出接口)。怎么办呢?
很简单,我们创建out对应的“输出流对象”,然后通过“输出流”的write()等输出接口就可以将信息输出到屏幕上。如下代码:
try { FileOutputStream out = new FileOutputStream(FileDescriptor.out); out.write("hello".getBytes()); out.close(); } catch (IOException e) { }
执行上面的程序之后会在屏幕上打印出hello。但是为了方便我们操作,java早已经帮我们完成了操作的封装,通过System.out.println("hello")。
【参考】http://www.fengfly.com/plus/view-214059-1.html
https://ruby-china.org/topics/161
https://zh.wikipedia.org/wiki/%E6%96%87%E4%BB%B6%E6%8F%8F%E8%BF%B0%E7%AC%A6
相关文章推荐
- SAS/SATA/SSD/IDE硬盘介绍区别
- java中的几个“区别”总结
- C++ 获取windows一些基本信息
- Python and or ?A:B
- POJ3254Corn Fields(状态压缩DP入门)
- 【网络文摘】面试感悟:3年工作经验程序员应有的技能
- UIPanGestureRecognizer学习笔记
- websphere设置企业应用使用的jvm最大最小内存
- PS简单制作超漂亮的叶雕效果
- 解决struts2过滤器冲突的简单方法
- 终于找到了梦想中的前端框架 --- vue.js
- 设置 TabBarItem 选中时的图片及文字颜色
- IO系统性能之一:衡量性能的几个指标
- Orchard源码分析(7.2):Controller相关
- 第五周上机实践项目——项目1-三角形类雏形-(4)
- java,二进制转换为十进制,valueof和parseInt的区别
- 对this的浅显的理解
- Caused by: org.springframework.beans.NullValueInNestedPathException: Invalid property 'xxxx'
- leetcode 2. Add Two Numbers
- HDU 1542 Atlantis(矩形并的面积)