Java的IO系统--字节流的一些子类(低级流)

低级流与高级流

1.节点流:直接连接两个设备的流类型,一般为低级流.即顶级父类的直接子类,具体来说就是extends InputStream或OutputStream的类(除FilterStream).

2.处理流:对节点流再次封装与处理的流类型,一般为高级流.即FilterStream的子类,具体来说就是extends FilterInputStream或FilterOutputStream的类,有一个带有InputStream或OutputStream的构造器.

FileOutputStream与FileInputStream(文件字节流)

简介

文件字节流,可以直接操作文件,在创建高级流的时候构造器中一般都有一个文件流对象.

构造器

FileInputStream

    FileInputStream(File file) 
    直接封装一个File对象.  
    FileInputStream(FileDescriptor fdObj) 这个构造器不是很了解..
    创建 FileInputStream通过使用文件描述符 fdObj ,其表示在文件系统中的现有连接到一个实际的文件。  
    FileInputStream(String name) 
    若传入的name存在对应的File对象,就封装对应的File对象,其内部调用了File(String pathName)构造器  

FileOutputStream 

    FileOutputStream(File file) 
    FileOutputStream(File file, boolean append) 
    直接封装一个File对象,append表示是否追加.  
    FileOutputStream(FileDescriptor fdObj) 
    创建文件输出流以写入指定的文件描述符,表示与文件系统中实际文件的现有连接。  
    FileOutputStream(String name)  
    FileOutputStream(String name, boolean append) 
    以name创建调用File(String pathName)构造器,append表示是否追加.  

方法

先来看看两者都有的方法.

    void close() 
    关闭此文件输入流并释放与流相关联的任何系统资源.   
    FileChannel getChannel() 
    返回与此文件输入流相关联的唯一的FileChannel对象.
    FileDescriptor getFD() 
    返回表示与此 FileInputStream正在使用的文件系统中实际文件的连接的 FileDescriptor对象.  

比较关键的就是close(),一般来说在finally块中对流调用close(),用来关闭流.

然后看看FileInputStream独有的方法:

    int available() 
    估计这个流中还剩几个字节,是本地方法. 
    int read() 
    从该流读取一个字节的数据,底层调用私有本地方法read0().  
    int read(byte[] b) 
    从流中读取b.length个字节,存入b,底层调用私有本地方法readBytes(). 
    int read(byte[] b, int off, int len) 
    从该输入流读取最多 len字节的数据为字节数组,底层调用私有本地方法readBytes(). 
    long skip(long n) 
    跳过n个字节开始读取,依旧是本地方法. 

可以看到大多数底层都是本地方法,具体代码要用OpenJDK看,一般来说是C语言实现的,毕竟这差不多就是直接操作硬件了:

    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;

然后是FileOutputStream独有的方法,只有三个write().可以想到,底层基本也都是调用的本地方法:

    void write(byte[] b) 
    读取b.length个字节,底层调用私有本地方法writeBytes().
    void write(byte[] b, int off, int len) 
    将len个字节写入从off下标开始的字节数组中,底层调用私有本地方法writeBytes().  
    void write(int b) 
    写入这个字节,底层调用私有本地方法write().  

这里给出本地方法的声明:

    private native void write(int b, boolean append) throws IOException;
  
    private native void writeBytes(byte b[], int off, int len, boolean append)
    throws IOException;

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值