Java IO(三) 之 FileInputStream

前言: 对于文件系统中的文件,都可以使用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 {(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 blocke1.printStackTrace();}}}

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

其他的IO流在本系列文章中会一一讲解。

让我们从自身的禁锢中放心地飞出去,重新审视自己,

Java IO(三) 之 FileInputStream

相关文章:

你感兴趣的文章:

标签云: