Java FileInputStream类
文章目录
- 总结
- FileInputStream类数据结构
- FileInputStream类方法
- FileInputStream类构造方法
- FileInputStream类操作方法
总结
- FileInputStream类用于从文件系统中的文件获取输入字节
- 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;
}
- fd是文件描述符,FileDescriptor里面有一个int型整数fd,和long型整数handle,fd为0代表标准输入流System.in,fd为1代表标准输出流System.out,fd为2代表System.err,而handle是原生方法set根据fd的值计算出来的。FileDescriptor还具有关闭流的功能
- path是文件的路径和文件名的组合
- channel是FileChannel文件通道,FileChannel文件通道是用于读取、写入、映射和操作文件的通道,可以提供比FileInputStream更强大的操作文件功能,而且channel和当前对象是息息相关的。无论是显式更改通道位置,还是通过读取或写入字节更改通道位置, 都将更改原始对象FileInputStream的文件位置,反之亦然。 通过文件通道更改文件长度将更改通过原始对象FileInputStream看到的长度,反之亦然。通过写入字节更改文件内容将更改原始对象FileInputStream看到的内容,反之亦然
- closeLock是用于关闭流的锁
- 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类相关推荐
- Java FileInputStream
1. Java FileInputStream类 (1. Java FileInputStream Class) Java FileInputStream class is a part of jav ...
- 应用FileInputStream类,编写应用程序,从磁盘上读取一个Java程序,并将源程序代码显示在屏幕上
应用FileInputStream类,编写应用程序,从磁盘上读取一个Java程序,并将源程序代码显示在屏幕上. package p1;import java.io.*; public class FI ...
- java流类图结构_java I/O 流总结
一.java 流操作有关的类和接口: 类 说明 Fil ...
- Java File类总结和FileUtils类
Java File类总结和FileUtils类 文件存在和类型判断 创建出File类的对象并不代表该路径下有此文件或目录. 用public boolean exists()可以判断文件是否存在. Fi ...
- Java FileInputStream close()方法与示例
FileInputStream类close()方法 (FileInputStream Class close() method) close() method is available in java ...
- Java FileInputStream finalize()方法与示例
FileInputStream类的finalize()方法 (FileInputStream Class finalize() method) finalize() method is availab ...
- java流类图结构_java学习之IO流(学习之旅,一)
个人在学习IO流的时候看到如下所示java 流类图结构的时候,我的感想是,这么多··处于蒙的状态. Java流类图结构 这么多,没有分类不好学,那我们就慢慢一口一口的吃,这样每天学习一点就好了,其实很 ...
- java fileinputstream.read(byte[])_Java分享笔记:FileInputStream流的 read()方法 和 read(byte[] b)方法...
1 /*------------------------ 2 FileInputStream: 3 ....//输入流,字节流 4 ....//从硬盘中存在的一个文件中读取内容,读取到程序中 5 .. ...
- 字节流与字符流(FileInputStream类和FileOutputStream类)
FileInputStream类和FileOutputStream类中,第一个类的源端和第二个类的目的端都是磁盘文件,它们的构造方法允许通过文件的路径名来构造相应的流.例如: FileInputSte ...
最新文章
- 李洪强iOS经典面试题153- 补充
- 李开复:旗下AI公司或在2021年上市,估值至少10亿美元
- C语言-动态内存分配总结
- matplotlib 笔记:使用TeX标记
- Linux系统学习----前言
- mysql函数及解析,Mysql研究之MySQL常用内置函数完全解析
- 打开方式中选择默认方式无反映_「Windows」得看,更改文件的默认应用,告别“打开方式”...
- jax-ws 生成soap_在Spring中记录JAX-WS SOAP消息
- python图片保存为txt文件_python + opencv实现提取png图像的像素信息并存储到txt文件中(附安装指导)...
- html 下拉到一定位置,浏览器向下滚动到一定位置继续滚动时,侧边导航固定在页面顶部,再滚动到一定位置时页面再向下滚动侧边导航不再固定。这种效果怎么实现呢...
- LeetCode刷题记录_最长公共前缀
- oracle function 写查询语句_五个 SQL 查询性能测试题,只有 40% 及格率,你敢来挑战吗?...
- 详解:Sqoop的导入和导出数据
- ASP.net 的URL路由选择(System.Web.Routing.dll)
- HTML+CSS 模仿Windows 7 桌面效果
- MATLAB非线性最小二乘lsqnonlin
- centos7根分区扩容(适用目前主流版本)
- #define 和typedef的区别
- insert overwrite table 后面为什么不能用select *,怎么解决这个bug
- 正交设计与OO/SOLID【转】