文章目录

  • 总结
  • FileInputStream类数据结构
  • FileInputStream类方法
    • FileInputStream类构造方法
    • FileInputStream类操作方法

总结

  1. FileInputStream类用于从文件系统中的文件获取输入字节
  2. FileInputStream用于读取原始字节流,如图像数据,要读取字符流,请考虑使用FileReader

FileInputStream类数据结构

public class FileInputStream extends InputStream {private final FileDescriptor fd;private final String path;private volatile FileChannel channel;private final Object closeLock = new Object();private volatile boolean closed;
}
  1. fd是文件描述符,FileDescriptor里面有一个int型整数fd,和long型整数handle,fd为0代表标准输入流System.in,fd为1代表标准输出流System.out,fd为2代表System.err,而handle是原生方法set根据fd的值计算出来的。FileDescriptor还具有关闭流的功能
  2. path是文件的路径和文件名的组合
  3. channel是FileChannel文件通道,FileChannel文件通道是用于读取、写入、映射和操作文件的通道,可以提供比FileInputStream更强大的操作文件功能,而且channel和当前对象是息息相关的。无论是显式更改通道位置,还是通过读取或写入字节更改通道位置, 都将更改原始对象FileInputStream的文件位置,反之亦然。 通过文件通道更改文件长度将更改通过原始对象FileInputStream看到的长度,反之亦然。通过写入字节更改文件内容将更改原始对象FileInputStream看到的内容,反之亦然
  4. closeLock是用于关闭流的锁
  5. closed用于指示流是否关闭

FileInputStream类方法

FileInputStream类构造方法

方法名 作用
FileInputStream(File file) FileInputStream的构造方法,先进行安全检查,判断File指定的文件是否真实存在,然后新建一个文件描述符FileDescriptor,将FileInputStream对象添加到FileDescriptor里面,方便以后关闭,最后调用原生open0方法打开文件
FileInputStream(String name) 调用上一个方法,只不过根据传入的文件名name,创建了一个File对象
FileInputStream(FileDescriptor fdObj) 使用文件描述符fdObj创建FileInputStream, 它表示与文件系统中实际文件的连接

FileInputStream类操作方法

方法名 作用
native void open0(String name) 原生方法,打开指定的文件进行读取
void open(String name) 打开指定的文件进行读取,调用上一个原生方法
native int read0() 原生方法,从该输入流读取一个字节的数据,如果没有可用的输入,此方法将阻塞
int read() 从该输入流读取一个字节的数据,如果没有可用的输入,此方法将阻塞,调用原生方法,返回如果是-1表示未读取到任何字节,调用上一个原生方法
native int readBytes(byte b[], int off, int len) 原生方法,从文件中读取数据到子数组,off表示从字节数组b的off下标处开始填充数据,len表示填充数据的字节数,这里的off并不是文件中的位置
int read(byte b[]) 调用上一个原生方法,从文件中读取数据并填满数组b,返回的int是实际读取的字节数
int read(byte b[], int off, int len) 调用readBytes原生方法,作用和其一模一样
native long skip0(long n) 跳过并丢弃输入流中的n字节数据,即不读取给定长度n个字节的数据,直接跳到后面读取
long skip(long n) 调用上一个原生方法,跳过并丢弃输入流中的n字节数据
native int available0() 返回可从此输入流读取(或跳过)的剩余字节数的估计值
int available() 调用上一个原生方法,返回可从此输入流读取(或跳过)的剩余字节数的估计值
final FileDescriptor getFD() 返回FileDescriptor对象,该对象表示与此FileInputStream使用的文件系统中的实际文件的连接
FileChannel getChannel() 返回与此文件输入流关联的唯一文件通道FileChannel
native void close0() 原生方法, 关闭此文件输入流并释放与该流关联的所有系统资源
void close() 调用上一个原生方法,关闭此文件输入流并释放与该流关联的所有系统资源,同时设置关闭状态closed为true,并取出文件描述符调用其closeAll方法,此方法会往上递归,把所有与该流关联的流全部关闭
void finalize() JVM垃圾回收会调用的方法,重写该方法并在里面调用close方法

Java FileInputStream类相关推荐

  1. Java FileInputStream

    1. Java FileInputStream类 (1. Java FileInputStream Class) Java FileInputStream class is a part of jav ...

  2. 应用FileInputStream类,编写应用程序,从磁盘上读取一个Java程序,并将源程序代码显示在屏幕上

    应用FileInputStream类,编写应用程序,从磁盘上读取一个Java程序,并将源程序代码显示在屏幕上. package p1;import java.io.*; public class FI ...

  3. java流类图结构_java I/O 流总结

    一.java 流操作有关的类和接口: 类                                                                          说明 Fil ...

  4. Java File类总结和FileUtils类

    Java File类总结和FileUtils类 文件存在和类型判断 创建出File类的对象并不代表该路径下有此文件或目录. 用public boolean exists()可以判断文件是否存在. Fi ...

  5. Java FileInputStream close()方法与示例

    FileInputStream类close()方法 (FileInputStream Class close() method) close() method is available in java ...

  6. Java FileInputStream finalize()方法与示例

    FileInputStream类的finalize()方法 (FileInputStream Class finalize() method) finalize() method is availab ...

  7. java流类图结构_java学习之IO流(学习之旅,一)

    个人在学习IO流的时候看到如下所示java 流类图结构的时候,我的感想是,这么多··处于蒙的状态. Java流类图结构 这么多,没有分类不好学,那我们就慢慢一口一口的吃,这样每天学习一点就好了,其实很 ...

  8. java fileinputstream.read(byte[])_Java分享笔记:FileInputStream流的 read()方法 和 read(byte[] b)方法...

    1 /*------------------------ 2 FileInputStream: 3 ....//输入流,字节流 4 ....//从硬盘中存在的一个文件中读取内容,读取到程序中 5 .. ...

  9. 字节流与字符流(FileInputStream类和FileOutputStream类)

    FileInputStream类和FileOutputStream类中,第一个类的源端和第二个类的目的端都是磁盘文件,它们的构造方法允许通过文件的路径名来构造相应的流.例如: FileInputSte ...

最新文章

  1. 李洪强iOS经典面试题153- 补充
  2. 李开复:旗下AI公司或在2021年上市,估值至少10亿美元
  3. C语言-动态内存分配总结
  4. matplotlib 笔记:使用TeX标记
  5. Linux系统学习----前言
  6. mysql函数及解析,Mysql研究之MySQL常用内置函数完全解析
  7. 打开方式中选择默认方式无反映_「Windows」得看,更改文件的默认应用,告别“打开方式”...
  8. jax-ws 生成soap_在Spring中记录JAX-WS SOAP消息
  9. python图片保存为txt文件_python + opencv实现提取png图像的像素信息并存储到txt文件中(附安装指导)...
  10. html 下拉到一定位置,浏览器向下滚动到一定位置继续滚动时,侧边导航固定在页面顶部,再滚动到一定位置时页面再向下滚动侧边导航不再固定。这种效果怎么实现呢...
  11. LeetCode刷题记录_最长公共前缀
  12. oracle function 写查询语句_五个 SQL 查询性能测试题,只有 40% 及格率,你敢来挑战吗?...
  13. 详解:Sqoop的导入和导出数据
  14. ASP.net 的URL路由选择(System.Web.Routing.dll)
  15. HTML+CSS 模仿Windows 7 桌面效果
  16. MATLAB非线性最小二乘lsqnonlin
  17. centos7根分区扩容(适用目前主流版本)
  18. #define 和typedef的区别
  19. insert overwrite table 后面为什么不能用select *,怎么解决这个bug
  20. 正交设计与OO/SOLID【转】

热门文章

  1. 深度学习网络设计原则
  2. 2021RoboCom机器人开发者大赛复赛解题
  3. 录录(高清录屏) - Video321 如何快速分享视频
  4. FWD:互联网重塑中国商业
  5. 涡轮制冷智能温控,红魔散热背夹体验,告别烫手宝
  6. 堡垒之夜服务器修改,堡垒之夜更改服务器 | 手游网游页游攻略大全
  7. PPT分屏放映操作小技巧
  8. UIView的hitTest和pointInside方法
  9. 音视频SDP协议详解(描述会话的协议)
  10. 安卓APP源码和设计报告——健身系统