[转]FileDescriptor详解
FileDescriptor是"文件描述符".
FileDescriptor可以被用来表示开放的文件,开放的套接字等.
当FileDescriptor表示文件来说,当FIleDescriptor表示某文件时,我们可以通俗的将FIleDescriptor看成该文件.但是,我们不能直接通过FIleDescriptor对该文件进行操作;若需要通过FIleDescriptor对该文件进行操作,则需要创建FileDescriptor对应的FileOutputStream,再对文件进行操作.
in,out,err的介绍
- in:标准输入(键盘)的描述符
- out:标准输出(屏幕)的描述符
- err:标准错误输出(屏幕)的描述符
他们三个的原理和用法都类似,下面通过out来进行深入的研究
out的作用和原理
out时标准输出(屏幕)的描述符,但是他有什么作用呢?
我们可以通俗理解,out 就代表了标准输出(屏幕).如我们要输出信息到屏幕,既可以通过out来操作,但是,out 有没有提供输出信息到屏幕的接口,怎么办呢?
很简单,我们创建Out对应的"输出流对象",然后通过"输出流"的write()等接口就可以输出信息到屏幕上去了.
public static void main(String[] args) throws IOException
{
FileOutputStream out = new FileOutputStream(java.io.FileDescriptor.out);
out.write("你好啊!".getBytes());
out.close();
}
程序输出:你好啊!
为了方便我们的操作,java早已经为我们封装好了能再屏幕上输出信息的接口:通过System.out
因此上面的代码等同于:System.out.print("你好啊!").
示例代码
public class FileDescriptorTest
{
private static final String FileName = "D:\\baiduyun\\filetest\\ddd.txt";
private static final String OutText = "Hi FileDescriptor"; public static void main(String[] args) throws IOException
{
// testStandFD();
// testWrite();
testRead();
} /**
* 该程序的效果 等价于 System.out.println(OutText);
*
* @Method_Name: testStandFD
* @Description: * void
* @date 2018年11月11日
* @author zhangj
* @throws IOException
*/
public static void testStandFD() throws IOException
{
FileOutputStream out = new FileOutputStream(FileDescriptor.out);
PrintStream print = new PrintStream(out);
print.write(OutText.getBytes());
} /**
* FileDescriptor写入示例程序
*
* @Method_Name: testWrite
* @Description: * void
* @date 2018年11月11日
* @author zhangj
* @throws IOException
*/
private static void testWrite() throws IOException
{
// 新建file对应FileOutPutStream对象
FileOutputStream fout = new FileOutputStream(FileName);
// 获得file对应的FileDescripto对象
FileDescriptor fd = fout.getFD();
// 根据FileDescriptor创建fileOutPutStream对象
FileOutputStream out = new FileOutputStream(fd.out);
fout.write("Hello".getBytes());
out.write("World".getBytes());
out.close();
fout.close();
} private static void testRead() throws IOException
{
// 新建文件“file.txt”对应的FileInputStream对象
FileInputStream fis = new FileInputStream(FileName);
// 获取文件“file.txt”对应的“文件描述符”
FileDescriptor fd = fis.getFD();
// 根据“文件描述符”创建“FileInputStream”对象
FileInputStream fiss = new FileInputStream(fd);
System.out.println("in1.read():" + (char) fis.read());
System.out.println("in2.read():" + (char) fiss.read());
fis.close();
fiss.close();
}
}
---------------------
作者:橘右京
来源:CNBLOGS
原文:https://www.cnblogs.com/zhangj-ymm/p/9943597.html
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件
[转]FileDescriptor详解的更多相关文章
- Android图片缓存之Bitmap详解
前言: 最近准备研究一下图片缓存框架,基于这个想法觉得还是先了解有关图片缓存的基础知识,今天重点学习一下Bitmap.BitmapFactory这两个类. 图片缓存相关博客地址: Android图片缓 ...
- java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET
java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET 亲,“社区之星”已经一周岁了! 社区福利快来领取免费参加MDCC大会机会哦 Tag功能介绍—我们 ...
- JavaI/O体系详解
Java中IO操作主要是指使用Java进行输入,输出操作,Java中所有的IO操作类都存放在Java.io包中,在使用时需要导入此包. 在整个Java.io包中最重要的就是5个类和一个接口.5个类指的 ...
- bitmap--Bitmap详解与Bitmap的内存优化
一.Bitmap: Bitmap是Android系统中的图像处理的最重要类之一.用它可以获取图像文件信息,进行图像剪切.旋转.缩放等操作,并可以指定格式保存图像文件. 常用方法: public voi ...
- linux select函数详解
linux select函数详解 在Linux中,我们可以使用select函数实现I/O端口的复用,传递给 select函数的参数会告诉内核: •我们所关心的文件描述符 •对每个描述符,我们所关心的状 ...
- Java网络编程和NIO详解8:浅析mmap和Direct Buffer
Java网络编程与NIO详解8:浅析mmap和Direct Buffer 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Java网络编程和NI ...
- Android JNI作用及其详解
Android JNI作用及其详解 Java Native Interface (JNI)标准是Java平台的一部分,它允许Java代码和其他语言写的代码进行交互.JNI 是本地编程接口,它使得在 J ...
- Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理
Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理 转自:https://www.jianshu.com/p/2b71ea919d49 本系列文章首发于我的个人博 ...
- Android开发之MdiaPlayer详解
Android开发之MdiaPlayer详解 MediaPlayer类可用于控制音频/视频文件或流的播放,我曾在<Android开发之基于Service的音乐播放器>一文中介绍过它的使用. ...
随机推荐
- PhpSpreadsheet处理表格2
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...
- 光(mirror room)
/* 光线只有遇上边界或堵塞的格子才会改变方向,所以改变方向的位置是有限的,光线的方向又最多只有四种,所以光线在循环之前改变方向的次数是O(n+m+k)级别的.我们可以模拟光线的移动.已知光线位置和光 ...
- 一次web请求发生的神奇故事
网络时代来临的时候,一个食指的点击就能解决很多问题! 那么当你的食指点击的时候,都发生了哪些神奇的事情呢?下面从几个角度为你做一个指引 1. 网络角度:一次网络请求是如何实现的 2. 浏览器角度:He ...
- JavaScript字符串、数组、对象方法总结
字符串方法 示例字符串: const str = "hello,kitty,hello,vue "; 一.基本方法 charAt(n) 返回指定索引的字符 charCodeAt(n ...
- AJAX(二)-实现验证码异步验证功能
案例实现效果 用户在前端输入验证码,按键收起触发异步验证,验证验证码的对错 前端代码 checkcode.jsp <%-- Created by IntelliJ IDEA. User: cxs ...
- Docker.[3].镜像操作.
Docker.[3].镜像操作. 熟悉基础指令: 查看本地镜像 docker images 查看本地镜像 docker image list (和上面显示的结果一样.) 删除本地镜像 docker r ...
- 第一次作业:reading and prepare
这个作业属于哪个课程 课程的链接 这个作业要求在哪里 作业要求的链接 我在这个课程的目标是 理解软件开发流程,更好的开发自己的软件 这个作业在哪个具体方面帮助我实现目标 对"工程" ...
- C++之ARX 读取配置文件内容时,会出现编码问题(utf-8转unicode)
CString CConvert::UTF82WCS(const char* szU8){ //预转换,得到所需空间的大小; int wcsLen = ::MultiByteToWideChar(CP ...
- python 正确地初始化对象
- codevs1839 洞穴勘测
题目描述 Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道 ...