码迷,mamicode.com
首页 > 编程语言 > 详细

Java IO(三) 之 FileInputStream

时间:2015-07-26 22:44:50      阅读:315      评论:0      收藏:0      [点我收藏+]

标签:java   io   输入流   

前言:
对于文件系统中的文件,都可以使用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

标签:java   io   输入流   

原文地址:http://blog.csdn.net/securitit/article/details/47071577

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!