前言:

对于文件系统中的文件。都能够使用FileInputStream流类以二进制的形式进行读取。可是因为Java本身的定位在JVM之上,没有处理计算机底层的能力。因此一些涉及底层处理的方法都是使用native方法调用第三方底层语言进行处理的。

本人重在解说FileInputStream类的内部实现。不会对其应用过分的解说。

FileInputStream的类图:

解析:

FileInputStream重载了3个构造方法。能够通过以下三种方式初始输入流:

public FileInputStream(String name) throws FileNotFoundException;

:以路径的方式初始一个输入流。其内部调用的是以下的构造方法

public FileInputStream(File file) throws FileNotFoundException;

:以File实例的方法初始一个输入流

public FileInputStream(FileDescriptor fdObj);

:以FileDescriptor实例初始一个输入流(FileDescriptor是一个文件描写叙述符)

FileInputStream内部记录了几个属性,用来标识输入流的状态:

private final String path;

:文件的路径信息

private final Object closeLock = new Object();

:关闭时的同步锁

private volatile boolean closed = false;

FileInputStream内部,有几个native类型的方法,用于调用底层语言来完整对于文件系统的操作:

private native void open0(String name) throws FileNotFoundException;

:打开文件

private native int read0() throws IOException;

:读取一个字节

private native int readBytes(byte b[], int off, int len) throws IOException;

:读取指定字节数

public native long skip(long n) throws IOException;

:丢弃指定字节,下次读取时,从丢弃后的位置開始读取

public native int available() throws IOException;

:获取文件接下来的文件长度

private static native void initIDs();

private native void close0() throws IOException;

:关闭文件

FileInputStream流类内部提供了一种对于文件操作的机制,可是因为Java语言的局限,FileInputStream须要通过native方法调用底层语言实现。

例如以下简单演示样例:

public class FileInTest {

    public static void main(String[] args) throws FileNotFoundException {

        InputStream is = new FileInputStream("F:/shiro-config.ini");

        int i;
try {
i = is.read(); while (i != -1) {
System.out.println((char) i);
i = is.read();
}
is.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} } }

在实际应用中。FileInputStream并不常单独使用,须要与其它装饰流一起使用,来达到更加简便的操作文件。

其它的IO流在本系列文章中会一一解说。

最新文章

  1. Android 圆形头像 自己动手
  2. c# 进程间的通信实现之一简单字符串收发
  3. 树状数组求第k小的元素
  4. 从svn检出项目---------不是web项目
  5. SystemMenu类的用法
  6. 初识suse-Linux相关!
  7. 定时任务之Spring与Quartz的整合(有修改)
  8. timus 1109 Conference(二分图匹配)
  9. Routed Events【pluralsight】
  10. 如何修改 Discuz 门户文章页默认视频大小
  11. HTML5之本地文件系统API - File System API
  12. angular4在prod模式下的JIT编译问题
  13. mixer: 一个用go实现的mysql proxy
  14. Android AutoCompleteTextView和MultiAutocompleteTextView实现动态自动匹配输入的内容
  15. 爬虫(一)jupyter环境安装
  16. 【转】Python 之 元类
  17. H5进行录音,播放,上传
  18. tomcat 服务器故障排除
  19. hdu1258
  20. onload属性使用方法

热门文章

  1. HDU 1215
  2. 《大话操作系统——做坚实的project实践派》(2)
  3. 数据格式与数据类型(Content-Type)
  4. 关于懒加载中的self.和_
  5. 参照实验室这边案例做一个简单的maven webapp项目
  6. ubuntu在桌面创建快捷方式
  7. element-ui 实现table整列的拖动
  8. BI中事实表与维度表的定义
  9. Oracle数据库基础(二)
  10. sql:String格式转换为时间进行比较