理解文件描述符

文件描述符(FileDescriptor) 这是Unix/Linux系统文件操作的相关概念,Android也属于Linux操作系统。因此理解Linux下的文件描述符也就明白安卓下文件描述符能用来做什么了

概述

对于每个进程,操作系统内核在u_block结构中维护文件描述符表,文件描述符是该表里的一个字段,该表还有一个字段是指向打开文件的记录表的索引值。这个打开文件的记录表里,又有很多字段,其中一个字段是指向i-node表的索引值(该表里记录了诸如文件类型,文件大小,访问权限等信息)

文件描述符在形式上是一个非负整数。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。

文件描述符的作用和意义

进程使用它来标识打开的文件。文件描述符与包括相关信息(如文件的打开模式、文件的位置类型、文件的初始类型等)的文件对象相关联,这些信息被称作文件的上下文。有了它就对文件做各种操作,获得文件的各种相关信息了。

使用文件描述符的好处主要有两个:

基于文件描述符的I/O操作兼容POSIX标准。

在UNIX、Linux的系统调用中,大量的系统调用都是依赖于文件描述符。

文件指针和文件描述符的关系

文件指针:指向进程用户区中的一个被称为FILE结构的数据结构。FILE结构包括一个缓冲区和一个文件描述符。

文件描述符:在linux系统中打开文件就会获得文件描述符,它是个很小的正整数。每个进程在PCB(Process Control Block)中保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针。

两者的关系: 通过上述对比,可以知道,通过文件指针能拿到文件描述符。文件指针更像是文件描述符的引用。

FileDescriptor在安卓里的使用

加载Bitmap图片

如果能持有本地图片文件的文件描述符,通过BitmapFactory.decodeFileDescriptor()就能获得Bitmap,

获取FileDescriptor对象,和文件流操作关系密切

FileDescriptor fd = fileInputStream.getFD();

FileDescriptor fd = fileOutputStream.getFD();

文件操作符能读取本地图片文件,平时我们经常使用的Java流操作也能操作文件。这两者有什么区别呢?往下看

文件描述符和流的区别

两者相同点:

都是用来表示和文件建立的连接,并在此连接的基础上对文件进行访问

,打开一个文件,要么返回文件描述符,要么返回一个流。

都包含有I/O库函数

两者不同点:

文件描述符:上文已分析,它是int类型。例如标准输入对应文件描述符0,标准输出对应文件描述符1。

流:表示为指向结构FILE的指针FILE* ,流也称为“文件指针”。因此,文件描述符和流的区别关系也就是成文件描述符和文件指针的区别关系

文件操作符更接近底层操作,流函数是通过文件描述符函数来实现的

流相对于文件描述符的优点:

流操作给用户程序提供了更高一级的I/O接口,流操作的各种函数灵活、强大,方便开发人员使用。

文件描述符函数只提供简单的传送字符块的函数

小结

安卓的内核用的是Linux的,安卓系统里的很多概念是Linux操作系统里的。深入学习安卓开发,某种程度是在学习Linux操作系统。

参考资料

android绑定文件描述符,认识安卓的文件描述符FileDescriptor相关推荐

  1. android swf 用什么打开方式,安卓swf文件用什么打开_swf文件用什么打开 mac_swf文件用什么打开 ipad...

    很多同学在平常使用手机的之后安卓swf文件用什么打开安卓swf文件用什么打开,都遭遇过后缀为swf的文件,但是有不知道是哪个要是,更不知道该怎么开启,不过不必害怕这儿小编就来帮你们看看swf文件怎么打 ...

  2. cordova 安卓文件多选_安卓zip文件压缩RAR解压软件下载-安卓zip文件压缩RAR解压下载v3.0.4安卓版...

    安卓zip文件压缩RAR解压是一款非常好用的手机压缩解压缩神器,在安卓zip文件压缩RAR解压上我们可以看到很多的实用的功能,软件可以帮助我们更好的处理我们手机中的文件,感兴趣的朋友赶紧下载安卓zip ...

  3. android 绑定服务 解绑服务,安卓案例:绑定和解绑服务

    安卓案例:绑定和解绑服务 一.运行效果 二.实现步骤 1.创建安卓应用BindUnbindService 2.准备背景图片background.jpg,放到mipmap目录里 3.布局资源文件acti ...

  4. Android中的羊角符,安卓开发binder

    两种羊角符 ===== 百度百科中给了如下羊角符定义: 人民币符号为:¥.书写顺序为:先写大写字母"Y",再在竖划上加上二横,即为"¥",读音为:yuán(音: ...

  5. 服务器文件描述,服务器编程中的文件描述符

    Linux系统下一切皆文件,通过虚拟文件系统(VFS)的机制将所有底层屏蔽掉,用户可以通过统一的接口来实现对不同驱动的操作,对于每一个文件需要一个引用来指示,此时文件描述符应用而生,文件描述符类似于W ...

  6. linux文件编程(2)——系统文件描述符、动静态文件、块设备介绍

    参考:linux文件编程(2)--文件操作原理简述之文件描述符.动静态文件.块设备 作者:丶PURSUING 发布时间: 2021-04-09 11:14:12 网址:https://blog.csd ...

  7. 文件流、目录流、文件描述符总结

    文件流.目录流.文件描述符总结 宗旨:技术的学习是有限的,分享的精神是无限的. 内核为使当前进程与进程打开的文件建立联系,在进程PCB(一个结构体task_struct)中使用一个成员来指向关于打开文 ...

  8. android和ios传文件怎么打开方式,安卓怎么给iPhone传文件?文件互传教程

    大家使用手机的时候肯定都会用到蓝牙或者互传文件功能,安卓和安卓手机直接传文件非常简单方便,那么安卓怎么给iPhone传文件呢?小编下面就给大家带来安卓和iPhone文件互传教程. 说道文件互传,大家肯 ...

  9. android引导程序下载,安卓引导文件下载-安卓引导文件源程序下载完整版-西西软件下载...

    现在越来越多程序都有引导页面了,但是网上的资料都不是很全,还有很多都是炒来炒去,漏了很多,能够让你的Android手机上启动的时候选择自己想要启动的ROM. 顺序是: OneAcitivity  -- ...

最新文章

  1. Python练习题,十大项目,一起探讨
  2. 浅谈利用SQLite存储离散瓦片的思路和实现方法
  3. vector机器人 HOW TO MEET VECTOR 如何满足向量
  4. 2.1.1 Speed Limit
  5. 2016计算机有哪些专业知识点,2016计算机专业知识:精选知识点练习(99)
  6. 拖动卡顿_四招教你解决PS软件卡顿问题!
  7. 在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’;输出这个数组中的所有元素。...
  8. python第四周测试答案_Python程序开发第四周作业
  9. 用户空间与内核空间数据交换的方式(3)------seq_file
  10. 如何根据动态SQL代码自动生成DTO
  11. xci转化nsp_4nxci软件下载[xci游戏转nsp格式工具]v2.10-k73游戏之家
  12. Halcon教程五:简单的条码识别案例
  13. 车间调度建模系列7|扩展析取图之基于设备偏好的三维析取图模型
  14. VMware虚拟化数据中心更改ESXI主机IP地址测试
  15. 项目管理 :PMO三种角色
  16. C# WinForm系列-创建Windows项目
  17. 海康工业相机LabVIEW二次开发——修改参数、存图
  18. 软件工程国考总结——判断题
  19. FlyMcu给STM32一键烧录程序
  20. html查看日历,找出万年历的日历

热门文章

  1. NFT Oasis指南
  2. hp计算机指纹功能用法,【惠普 EliteBook 735G5 13.3英寸笔记本电脑使用总结】雾面屏|键盘|运行|接口|指纹识别_摘要频道_什么值得买...
  3. python写小猪佩奇_这个程序员用 Python 20 秒画完小猪佩奇“社会人”!
  4. linux 时间戳13,13/11位unix时间戳转换成标准时间
  5. 7月10日服务器例行维护公告,7月10日服务器例行维护公告(已完成)
  6. Docker Swarm集群搭建以及服务命令等操作
  7. Shopee活动保证金系统升级
  8. 烂笔头笔记:关于frontend-maven-plugin插件无法下载nodejs和npm的问题
  9. Ubuntu 常用快捷键、指令以及相关操作
  10. bl小说里面有个机器人管家_【连载】小说--妖魔道(二)