Java 日看一类(16) 之IO包中的FileDescriptor类

详解Java中的File文件类以及FileDescriptor文件描述类 在Java中File类可以用来新建文件和目录对象,而FileDescriptor类则被用来表示文件或目录的可操作性,接下来我们就来详解Java中的File文件类以及FileDescriptor文件描述类 立即下载

该类无继承关系,引入了如下包:

import java.util.ArrayList;
import java.util.List;




该类属于final类,其类头注释如下:

/**
 * Instances of the file descriptor class serve as an opaque handle
 * to the underlying machine-specific structure representing an open
 * file, an open socket, or another source or sink of bytes. The
 * main practical use for a file descriptor is to create a
 * <code>FileInputStream</code> or <code>FileOutputStream</code> to
 * contain it.
 * <p>
 * Applications should not create their own file descriptors.
 *
 * @author  Pavani Diwanji
 * @see     java.io.FileInputStream
 * @see     java.io.FileOutputStream
 * @since   JDK1.0
 */

大意如下:

该类的实例是作为与底层机器结构相关的不透明句柄

可以表示开放文件,开放套接字,另一个源或者部分沉底字节

该类最主要的实用方法就是去创建一个包含该类的FIleInputStream或者FileOutputStream

应用程序不应该创建自己的文件描述符类




该类含有如下的成员变量:

int类的文件描述符:

private int fd;

直接父文件路径:(Closeable方便描述,因为具体对象类可能不同

private Closeable parent;

其他间接父文件路径:

private List<Closeable> otherParents;

标志状态位(当前流是否关闭)

private boolean closed;



该类含有如下的方法:

公共构造函数(默认)

public /**/ FileDescriptor() {
    fd = -1;//-1为无效
}

私有构造函数(根据成员方法的判定进行赋值)

private /* */ FileDescriptor(int fd) {
    this.fd = fd;
}

文件输入流句柄in(标准

public static final FileDescriptor in = new FileDescriptor(0);//0为输入流标示

文件输出流句柄out(标准

public static final FileDescriptor out = new FileDescriptor(1);//1为输出流标示

错误流句柄err(标准

public static final FileDescriptor err = new FileDescriptor(2);//2为错误流标示

判定文件标识符有效性

public boolean valid() {
    return fd != -1;
}

强制系统缓冲同步(native方法

public native void sync() throws SyncFailedException;

该类JNI初始化(猜测

private static native void initIDs();

把该Closeable作为父类流联系(实质就是该文件的父路径,只不过用Closeable好描述)

synchronized void attach(Closeable c) {
    if (parent == null) {//如果没有父类把该类作为直接父类
        // first caller gets to do this
        parent = c;
    } else if (otherParents == null) {//如果“所有父类”为空则把直接父类和传入父类加入
        otherParents = new ArrayList<>();
        otherParents.add(parent);
        otherParents.add(c);
    } else {//直接加入
        otherParents.add(c);
    }
}

关闭所有的拥有该标志符的流(及把该类

synchronized void closeAll(Closeable releaser) throws IOException {
    if (!closed) {//检测当前标识符从属流是否处于关闭态
        closed = true;//设置为已关闭
        IOException ioe = null;
        try (Closeable c = releaser) {//try后括号内容在try执行完后会自动释放
            if (otherParents != null) {
                for (Closeable referent : otherParents) {
                    try {
                        referent.close();
                    } catch(IOException x) {
                        if (ioe == null) {
                            ioe = x;
                        } else {
                            ioe.addSuppressed(x);//把异常压入异常栈,防止丢失(多层异常捕捉有可能出现异常丢失(一般是finally块出错),压入栈记录)
                        }
                    }
                }
            }
        } catch(IOException ex) {
            /*
             * If releaser close() throws IOException
             * add other exceptions as suppressed.
             */
            if (ioe != null)//内层存在异常就压栈
                ex.addSuppressed(ioe);
            ioe = ex;
        } finally {
            if (ioe != null)
                throw ioe;
        }
    }
}




存在两个静态代码块:

初始化JNI

static {
    initIDs();
}

把JavaIOFileDescriptorAccess加入到ShareSecrets中(这句是注释,目测其方法是向系统底层注册该类,将该类与底层链接(主要是句柄的传递)

static {
    sun.misc.SharedSecrets.setJavaIOFileDescriptorAccess(
        new sun.misc.JavaIOFileDescriptorAccess() {
            public void set(FileDescriptor obj, int fd) {
                obj.fd = fd;
            }

            public int get(FileDescriptor obj) {
                return obj.fd;
            }

            public void setHandle(FileDescriptor obj, long handle) {
                throw new UnsupportedOperationException();
            }

            public long getHandle(FileDescriptor obj) {
                throw new UnsupportedOperationException();
            }
        }
    );
}




该类基本很少使用,更多时候我们会直接使用输入输出流。

该类的fd值是系统给的,无法自主修改(不是只有0、1、2。。。系统会给串随机ID,0、1、2是标准系统流)

网上关于该类的文章也有很多,希望深入了解的朋友可以多看看。

YOLOv13改进:注意力机制 | 动态稀疏注意力的双层路由方法BiLevelRoutingAttention | CVPR2023 BiLevelRoutingAttention方法对小目标检测效果比较好。可能是因为BRA模块是基于稀疏采样而不是下采样,一来可以保留细粒度的细节信息,二来同样可以达到节省计算量的目的。 阅读详情

相关推荐

音频测试专题

麦克风与扬声器单体测试指标及整机性能测试概述 麦克风测试指标包括频率响应、灵敏度、指向性等10项关键参数,用于评估声音捕捉和信号转换性能。扬声器测试包含频率响应、灵敏度等12项指标,涉及声学特性和物理参数。整机性能测试覆盖安静、嘈杂和正常三种环境,重点检测麦克风底噪、清晰度、扬声器音量及通话质量等12项功能指标。两类单体测试与整机测试共同构成完整的音频设备质量评估体系,确保产品在不同场景下的性能表现。

weixin_52640906的博客 1319

Java IO (15) -- FileDescriptor 类

文章目录1. 概念2. 字段3. 方法1. 构造器2. 其他方法4. 案例 1. 概念 2. 字段 3. 方法 1. 构造器 2. 其他方法 4. 案例

南京的博客 404

腾讯滑块验证码collect参数逆向与JSVMP对抗实战

本文深入解析腾讯滑块验证码collect参数的逆向过程与JSVMP虚拟机对抗技术。通过详细的环境搭建、抓包分析和JSVMP逆向技巧,揭示collect参数的生成逻辑与加密流程,并提供完整的模拟实现方案和常见问题排查方法,助力开发者突破腾讯天御验证码的防护机制。

weixin_29009501的博客 1583

java descriptor_java io系列09之 FileDescriptor总结

本章对FileDescriptor进行介绍FileDescriptor 介绍FileDescriptor 是“文件描述符”。FileDescriptor 可以被用来表示开放文件、开放套接字等。以FileDescriptor表示文件来说:当FileDescriptor表示某文件时,我们可以通俗的将FileDescriptor看成是该文件。但是,我们不能直接通过FileDescriptor对该文件进行...

weixin_29779159的博客 487

PX4 Offboard模式实战避坑:为什么你的Gazebo无人机解锁了却飞不起来?

本文深入解析PX4 Offboard模式下Gazebo无人机解锁后无法起飞的关键原因,提供详细的故障排查流程和调试方法。重点解决MAVROS连接、setpoint消息频率、坐标系一致性等常见问题,帮助开发者快速掌握无人机控制核心技术。

weixin_33461476的博客 328

基于Meteoinfo与TrajStat的后向轨迹聚类分析实战:从数据准备到可视化制图

本文详细介绍了基于Meteoinfo与TrajStat进行后向轨迹聚类分析的完整实战流程。从Java环境配置、Meteoinfo软件与TrajStat插件安装,到精准获取NOAA气象数据、设置参数进行批量轨迹计算,再到利用聚类分析提炼主要气流路径,并最终完成专业地图可视化与制图。文章旨在帮助环境与气象研究者快速掌握从数据准备到成果输出的全链路操作。

p4q5r6s7t的博客 805

(每日持续更新)jdk api之FileDescriptor基础、应用、实战

java.io以下是标准输入流的文件描述符。标准输出流的文件描述符。标准错误流的文件描述符。检查文件描述符是否有效。将文件描述符的数据同步到存储设备中。根据给定的整数文件描述符创建一个新的实例。

a89879193的专栏 1431

中兴FTTR光猫变简易OLT:低成本搭建全光监控与局域网实战指南

本文详细介绍了如何将中兴FTTR光猫改造为简易OLT设备,实现低成本全光监控与局域网扩展。通过LOID认证、桥接模式设置及终端数破解,用户可利用二手设备搭建高性能光纤网络,适用于远程监控和长距离组网场景,显著降低部署成本。

chair的专栏 2045

【Java原理系列】 FileDescriptor原理用法源码分析

是一个文件描述符类,它作为对底层机器特定结构的不透明句柄,表示一个打开的文件、打开的套接字或其他字节源或接收器。主要实际用途是创建或。应用程序不应该自己创建文件描述符。int fd:文件描述符的整数值。:文件描述符的长整型值。:关联的Closeable对象,用于跟踪引用此文件描述符的其他对象。:与此文件描述符共享的其他Closeable对象列表。:标记文件描述符是否已关闭。:构造一个(无效的)对象。:标准输入流的文件描述符。:标准输出流的文件描述符。:标准错误流的文件描述符。

wang2leee的博客 667

使用静态库在嵌入式系统中进行开发

静态库是一种包含预编译对象代码的文件,它可以与应用程序链接在一起,并在编译时将库的代码复制到最终的可执行文件中。静态库是包含预编译对象代码的文件,可以与应用程序链接在一起,并在编译时将库的代码复制到最终的可执行文件中。需要注意的是,由于嵌入式系统的资源限制,开发人员应该仔细选择需要包含在静态库中的功能,并避免引入不必要的依赖关系。需要注意的是,由于嵌入式系统的资源限制,开发人员应该仔细选择需要包含在静态库中的功能,并避免引入不必要的依赖关系。的静态库文件,可以在嵌入式系统的应用程序中使用它了。

ZrElixir的博客 206

整理 钢琴 约翰汤普森-简易钢琴(小汤)

文件名:(小汤1)约翰-汤普森钢琴1 超清PDF (原版引进)文件名:(小汤2)约翰-汤普森钢琴2 超清PDF (原版引进)文件名:(小汤3)约翰-汤普森钢琴3 超清PDF (原版引进)文件名:(小汤4)约翰-汤普森钢琴4 超清PDF (原版引进)文件名:(小汤5)约翰-汤普森钢琴5 超清PDF (原版引进)文件大小:20.1 MB。文件大小:23.7 MB。文件大小:45.7 MB。文件大小:51.7 MB。文件大小:72.0 MB。

TS的博客 5万+

java filedescriptor_java IO笔记(FileDescriptor)

由于在看io源码中偶尔看到FileDescriptor,所以本篇决定讲讲FileDescriptor,从字面上来看它就是文件描述符。官方是这么描述的:可以看出,FileDescriptor可以看做一种指向文件引用的抽象化概念。它能表示一个开放文件,一个开放的socket或者一个字节的源。它最主要的用途就是去创建FileInputStream或者FileOutputStream。并且也说了不应该创建...

weixin_28749997的博客 649

【论文精读】Virtual Adversarial Training——一种用于监督学习和半监督学习的正则化方法

本文提出了一种新的正则化方法——虚拟对抗训练(Virtual Adversarial Training, VAT),旨在通过引入虚拟对抗损失来增强模型的泛化能力。虚拟对抗损失衡量了给定输入条件下条件标签分布的局部平滑性,定义为模型对输入数据点周围局部扰动的鲁棒性。与传统对抗训练不同,VAT不需要标签信息来定义对抗方向,因此适用于半监督学习。本文详细阐述了VAT的核心方法,并通过实验验证了其在多个基准数据集上的有效性。:虚拟对抗训练;正则化方法;监督学习;半监督学习;对抗方向。

nmdbbzcl的博客 366

java filedescriptor_java io系列09之 FileDescriptor总结

本章对FileDescriptor进行介绍FileDescriptor 介绍FileDescriptor 是“文件描述符”。FileDescriptor 可以被用来表示开放文件、开放套接字等。以FileDescriptor表示文件来说:当FileDescriptor表示某文件时,我们可以通俗的将FileDescriptor看成是该文件。但是,我们不能直接通过FileDescriptor对该文件进行...

weixin_30989583的博客 936

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

FileDescriptor详解

FileDescriptor 介绍 FileDescriptor 是“文件描述符”。 FileDescriptor 可以被用来表示开放文件、开放套接字等。 以FileDescriptor表示文件来说:当FileDescriptor表示某文件时,我们可以通俗的将FileDescriptor看成是该文件。但是,我们不能直接通过FileDescriptor对该文件进行操作;若需要通过FileD

morningsun1990的专栏 1万+

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

java io系列09之 FileDescriptor总结

本章对FileDescriptor进行介绍 转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_09.html FileDescriptor 介绍 FileDescriptor 是“文件描述符”。FileDescriptor 可以被用来表示开放文件、开放套接字等。以FileDescriptor表示文件来说:当FileDescriptor...

kk的博客 133

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

16.IO、文件、NIO【草案二】

(这一个章节将讲到Java里面比较重要的一个章节,这里说一句抱歉,因为最近换工作的原因,一直没有时间继续书写教程,不过接下来我会一直坚持写下去的哈,希望大家能够支持。这个章节主要涉及到常用的文件读写,包括高级的文件IO内容——java.nio,因为这些内容在如今的一些项目里面也属于相当常见的一部分,如果有什么遗漏或者笔误的话,希望读者来Email告知:silentbalanceyh@126.com

风中的索莉逖亚 5022

Java IO详解:File、FileInputStream与FileOutputStream

Java文件IO操作的核心类包括File、FileInputStream和FileOutputStream,它们构成了文件处理的基础。File类用于管理文件路径和元数据操作,但不涉及内容读写。FileInputStream和FileOutputStream分别实现字节流的读取和写入功能,支持原始字节数据的文件操作。文章详细解析了这些类的构造方法、核心API及使用场景,并对比了字节流与字符流的差异。最佳实践建议使用缓冲流提升性能,同时强调了资源关闭和异常处理的重要性。全文从源码层面剖析设计原理,为开发者掌握J

百锦再的博客 1480

java io流_Java——IO流超详细总结

该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架。在初学Java时,IO流是我遇到的一个很头疼的东西,Java IO 体系看起来类很多,感觉很复杂,但其实是 IO 涉及的因素太多了。在设计 IO 相关的类时,编写者也不是从同一个方面考虑的,所以会给人一种很乱的感觉,并且还...

weixin_39838362的博客 2164

Java - IO部分的学习总结

文章目录1.File类File类的构造方法File类的常用方法:1.1对一些构造方法和方法的使用1.1.1创建文件和创建文件夹:1.1.2在文件夹里面创建一个文件:1.1.3对文件进行删除1.1.4移动文件路径1.1.5File类的字段2.文件遍历案例:2.1创建对象2.2遍历方法2.2.1解释2.3所有代码3.文件过滤器(了解)3.1FileFilter接口3.1.1accept()方法3.2初步代码演示3.2.1创建一个过滤文件的接口class3.2.2创建遍历文件的方法listFile(File)3.

彭_德华的博客 523

JDK中IO包的源码解读配合大神的一起看,秒懂。

大神总结的目录:http://www.cnblogs.com/skywang12345/p/io_01.html(装载),仅供个人学习,如有抄袭请包容(我也忘了cry....) 一、 BufferedInputStream类 1)  构造方法 BufferedInputStream(InputStreamin) BufferedInputStream(InputStreamin, int ...

MRA__S__的专栏 2144

01--Java IO基础

一、java.io包概览 Java IO包主要可以分为如下4类: 基于字节操作的I/O接口:InputStream和OutputStream。 基于字符操作的I/O接口:Writer和Reader 基于磁盘操作的I/O接口:File。 基于网络操作的I/O接口:Socket(没在IO包下)。 前2种区分I/O操作中数据的格式,后2种主要是数据传输的方式。 二、基于字节...

weixin_38169798的博客 136

IO知识Java篇(4) -Java IO API、read/write 全过程分析

流,包括输入输出字节流,输入输出字符流,字符流与字节流的转换 输入输出流的缓存包装器BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter Java进程中IO read/write 请求的全过程 一 文件File,文件句柄FileDescriptor,RandomAccessFile,FileChannel 1 File         File对象代表通过路径映射到操作系统的文件系统的目录或文件,可通过Fi

jarip的专栏 250

Java 传统IO概要

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33733810的博客 88
上一篇: Java 日看一类(15)之IO包中的File类
下一篇: Java 日看一类(17)之IO包中的FileInputStream类
wyf95278
博客等级 码龄10年 38粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值