zoukankan      html  css  js  c++  java
  • 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 {
    
        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流在本系列文章中会一一解说。

  • 相关阅读:
    Zigbee学习路线
    Zigbee简介
    验证lagrange 定理
    为什么(12)式,km不能直接相乘?而要让域k先乘一个代数A里面的单位元,再作用在群M上呢?
    strong weak distribution
    sufficient statistics
    tensorflow TypeError: Can not convert a float32 into a Tensor or Operation
    tensorflow 训练的时候loss=nan
    tensorflow run()和 eval()
    python array基本操作一
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7080464.html
Copyright © 2011-2022 走看看