随笔 - 1162  文章 - 0  评论 - 16  阅读 - 59万 

一、Java 中IO流四大抽象基类

  

 

二、InputStream:字节输入流

  1、InputStream 类概述

    java.io.InputStream 抽象类是表示字节输入流的所有类的超类,可以读取字节信息到内存中。

  2、InputStream 类继承结构

    

 

  3、常用子类

 

     InputStream 是所有字节输入流的基类,典型实现为:FileInputStream。

     FileInputStream 从文件系统中的某个文件中获得输入字节。 FileInputStream 用于读取非文本数据之类的原始字节流。要读取字符流, 需要使用 FileReader。
    InputStream 的子类:

    

    深色的为节点流,浅色的为处理流。

  4、常用方法

    它定义了字节输入流的基本共性功能方法。

1
int read()

      从输入流中读取数据的下一个字节。 返回 0 255 范围内的 int 字节值。 如果因为已经到达流末尾而没有可用的字节, 则返回值 -1

1
int read(byte[] b)

      从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。 如果因为已经到达流末尾而没有可用的字节, 则返回值 -1。 否则整数形式返回实际读取的字节数

1
int read(byte[] b, int off,int len)

     将输入流中最多 len 个数据字节读入 byte 数组。 尝试读取 len 个字节, 但读取的字节也可能小于该值。 以整数形式返回实际读取的字节数。 如果因为流位于文件末尾而没有可用的字节, 则返回值 -1

1
public void close() throws IOException

    关闭此输入流并释放与该流关联的所有系统资源。

    注意

      ① 如果 read() 方法到达流末尾没有可用的字节,返回-1;

      ② close 方法,当完成流的操作时,必须调用此方法,释放系统资源;

  5、

三、Reader:字符输入流

  1、Reader 类概述

    java.io.Reader 抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中。

  2、Reader 类继承结构

     

 

  3、常用子类

    

    Reader 抽象类的子类结构:

   

   注意:深色的为节点流,浅色的为处理流。

  4、常用方法

    它定义了字符输入流的基本共性功能方法。

1
public int read()

    读取单个字符。 作为整数读取的字符, 范围在 0 65535 之间 (0x00-0xffff)2个字节的Unicode码) , 如果已到达流的末尾, 则返回 -1

1
public int read(char[] cbuf)

    将字符读入数组。 如果已到达流的末尾, 则返回 -1。 否则返回本次读取的字符数。

1
public int read(char[] cbuf,int off,int len)

    将字符读入数组的某一部分。 存到数组cbuf中, 从off处开始存储, 最多读len个字符。 如果已到达流的末尾, 则返回 -1。 否则返回本次读取的字符数。

1
public void close() throws IOException

    关闭此输入流并释放与该流关联的所有系统资源。

         注意:上面的 read() 方法,如果流中没有数据可读,统统返回 -1。

  5、

四、OutputStream

  1、OutputStream 类概述

    java.io.OutputStream 抽象类是表示字节输出流的所有类的超类,将指定的字节信息写出到目的地。

  2、OutputStream 类继承结构

    

 

  3、常用子类

    

     FileOutputStream 从文件系统中的某个文件中获得输出字节。 FileOutputStream 用于写出非文本数据之类的原始字节流。 要写出字符流, 需要使用 FileWriter。

    java.io.OutputStream 该为作为一个抽象类,下面有很多的子类。

    

      图中深色的为节点流,浅色的为处理流。

 

  4、常用方法

    该类中定义了字节输出流的基本共性功能方法:

1
public void write(int b)

    将指定的字节写入此输出流。 write 的常规协定是:向输出流写入一个字节。 要写入的字节是参数 b 的八个低位。 b 24 个高位将被忽略。 即写入0~255范围的。

1
public void write(byte[] b)

    b.length 个字节从指定的 byte 数组写入此输出流。 write(b) 的常规协定是:应该与调用 write(b, 0, b.length) 的效果完全相同。

1
public void write(byte[] b,int off,int len)

    将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。

1
public void flush()throws IOException

    刷新此输出流并强制写出所有缓冲的输出字节, 调用此方法指示应将这些字节立即写入它们预期的目标。

1
public void close() throws IOException

    关闭此输出流并释放与该流关联的所有系统资源。close 方法,当完成流的操作时,必须调用此方法,释放系统资源。

 

  5、

五、Writer:字符输出流

  1、Writer 类概述

    java.io.Writer 抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。

  2、Writer 类继承结构

    

 

  3、常用子类

    

      Writer 抽象类下面的子类结构: 

    

   图中深色的为节点流,浅色的为处理流。

 

  4、常用方法

    它定义了字节输出流的基本共性功能方法:

1
void write(int c)

    写入单个字符。 要写入的字符包含在给定整数值的 16 个低位中, 16 高位被忽略。 即写入0 65535 之间的Unicode码。

1
void write(char[] cbuf)

    写入字符数组。

1
void write(char[] cbuf,int off,int len)

    写入字符数组的某一部分。 从off开始, 写入len个字符

1
void write(String str)

    写入字符串。

1
void write(String str,int off,int len)

    写入字符串的某一部分,off 字符串的开始索引,len 写入的字符个数。

1
void flush()

    刷新该流的缓冲, 则立即将它们写入预期目标。

1
public void close() throws IOException

    关闭此输出流并释放与该流关联的所有系统资源。

 

    因为字符流直接以字符作为操作单位,所以 Writer 可以用字符串来替换字符数组,即以 String 对象作为参数

 

1
2
void write(String str);
void write(String str, int off, int len);

 

  

  5、

六、注意点

  程序中打开的文件 IO 资源不属于内存里的资源,垃圾回收机制无法回收该资源,所以应该显式关闭文件 IO 资源

 

posted on   格物致知_Tony  阅读(679)  评论(0编辑  收藏  举报
编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
历史上的今天:
2019-05-31 Oracle 数据字典
2019-05-31 Oracle 11g 物理存储结构
点击右上角即可分享
微信分享提示

目录导航