前言:

对于文件系统中的文件。都能够使用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流在本系列文章中会一一解说。

Java IO(三) 之 FileInputStream的更多相关文章

  1. java IO(三):字符流

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  2. Java IO(三)

    File File类的常见方法: 1.创建. boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false.和输出流不一样,输出流对象一建立就创建文 ...

  3. Java IO(三)--字节流基本使用

    I/O流分类: InputStream和Read的子类都有read(),用来读取单个字节或字节数组 OutputStream和write的子类都有write(),用来写入单个字节或字节数组 一般都是通 ...

  4. 系统学习 Java IO (三)----文件类 File

    目录:系统学习 Java IO---- 目录,概览 Java IO API 中的 File 类可以访问基础文件系统. 使用 File 类,可以: 检查文件或目录是否存在. 如果目录不存在,创建一个目录 ...

  5. java Io流中FileInputStream和BufferedInputStream的速度比较

    首先是对FileInputStream 加上 FileOutputStream 对文件拷贝的应用 我这里拷贝的是一个视频.当然,你们拷贝什么都可以,当文件越大时效果越明显 下面是对BufferedIn ...

  6. Java IO: FileInputStream

    原文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) FileInputStream可以以字节流的形式读取文件内容.FileInputStream ...

  7. 系统学习 Java IO ---- 目录,概览

    Java IO 类的系统教程,原创.主要参考自英文教程 Java IO Tutorial 和 Java Doc. http://tutorials.jenkov.com/java-io/index.h ...

  8. Java IO 之 FileInputStream & FileOutputStream源码分析

    Writer      :BYSocket(泥沙砖瓦浆木匠) 微         博:BYSocket 豆         瓣:BYSocket FaceBook:BYSocket Twitter   ...

  9. [转]探究java IO之FileInputStream类

    使用FileInputStream类创建的InputStream对象可以用于从文件读取内容.两个常用的构造函数如下所示: ? 1 2 FileInputStream(String filePath) ...

随机推荐

  1. hdu 1166 敌兵布阵——(区间和)树状数组/线段树

    pid=1166">here:http://acm.hdu.edu.cn/showproblem.php?pid=1166 Input 第一行一个整数T.表示有T组数据. 每组数据第一 ...

  2. 王立平--poser

    Poser是Metacreations公司推出的一款lemmaId=234814&ss_c=ssc.citiao.link" style="color:rgb(51,102 ...

  3. #定位系统性能瓶颈# perf

    perf是一个基于Linux 2.6+的调优工具,在liunx性能測量抽象出一套适应于各种不同CPU硬件的通用測量方法,其数据来源于比較新的linux内核提供的 perf_event 接口 系统事件: ...

  4. 2015.05.11,外语,读书笔记-《Word Power Made Easy》 15 “如何谈论事情进展” SESSION 44

    1. not the real McCoy simulate(['simjuleit] v. 假装,冒充,模仿,模拟)来自拉丁simulo,copy的意思.simulo本身派生自拉丁形容词simili ...

  5. QFileSystemModel只显示名称,不显示size,type,modified

    Qt 提供的 QFileSystemModel可以提供文件目录树预览功能,但是预览的都自带了Name,size,type, modified等信息.我现在只想显示name这一列,不想显示size,ty ...

  6. java位运算笔记

    位运算: ~(非)-->二进制数进行0和1的互换 样例: public class Test { public static void main(String[] args) { System. ...

  7. mysqlbinlog高速遍历搜索记录

    目标,开发者说有个数据莫名其妙加入了.可是不知道是从哪里加入的.并且应用功能里面不应该加入这种数据,为了查清楚来源,所以我就准备去binlog里面找了.可是binlog有好几个月的数,我这样一个个my ...

  8. Oracle新建Schema

    1.首先,创建(新)用户: create user username identified by password; username:新用户名的用户名 password: 新用户的密码也可以不创建新 ...

  9. 0x05 排序

    说是排序结果就是各种奇技淫巧 中位数被坑多了久病成医,例题一题搞笑一题糖果传递(昨晚精神那么好效率还那么差) #include<cstdio> #include<iostream&g ...

  10. hdoj--1251--统计难题(字典树)

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others) Total Subm ...