IO流详解

IO流的概念

  • IO是InputOutput的简写,也就是输入和输出的含义。
  • IO流是指读写数据时像流水一样从一端流到另外一端,因此得名为"流"。

基本分类

  • 按照读写数据的基本单位,分为 字节流 和 字符流:
    • 字节流:以字节为单位进行数据读写的流,可以读写任意类型的文件。
    • 字符流:以字符(2个字节)为单位进行数据读写的流,只能读写文本文件。
  • 按照读写数据的方向不同,分为 输入流 和 输出流(站在程序的角度)。
    • 输入流:从文件中读取数据内容输入到程序中,也就是读文件。
    • 输出流:将程序中的数据内容输出到文件中,也就是写文件。
  • 按照流的角色不同分为节点流和处理流。
    • 节点流:直接和输入输出源对接的流。
    • 处理流:需要建立在节点流的基础之上的流。

体系结构

image-20211014212954667

相关流详解

FileWriter

java.io.FileWriter类主要用于将文本内容写入到文本文件。

常用方法说明
FileWriter(String fileName)根据参数指定的文件名构造对象
FileWriter(String fileName, boolean append)以追加的方式根据参数指定的文件名来构造对象
void write(int c)写入单个字符
void write(char[] cbuf, int off, int len)将指定字符数组中从偏移量off开始的len个字符写入此文件输出流
void write(char[] cbuf)cbuf.length个字符从指定字符数组写入此文件输出流中
void flush()刷新流
void close()关闭流对象并释放相关的资源

FileReader

java.io.FileReader类主要用于从文本文件读取文本数据内容。

常用方法说明
FileReader(String fileName)根据参数指定的文件名构造对象
int read()读取单个字符的数据并返回,返回-1表示读取到末尾
int read(char[] cbuf, int offset, int length)从输入流中将最多len个字符的数据读入一个字符数组中,返回读取到的字符个数,返回-1表示读取到末尾
int read(char[] cbuf)从此输入流中将最多 cbuf.length 个字符的数据读入字符数组中,返回读取到的字符个数,返回-1表示读取到末尾
void close()关闭流对象并释放相关的资源

FileOutputStream

java.io.FileOutputStream类主要用于将图像数据之类的原始字节流写入到输出流中。

常用方法说明
FileOutputStream(String name)根据参数指定的文件名来构造对象
FileOutputStream(String name, boolean append)以追加的方式根据参数指定的文件名来构造对象
void write(int b)将指定字节写入此文件输出流
void write(byte[] b, int off, int len)将指定字节数组中从偏移量off开始的len个字节写入此文件输出流
void write(byte[] b)b.length 个字节从指定字节数组写入此文件输出流中
void flush()刷新此输出流并强制写出任何缓冲的输出字节
void close()关闭流对象并释放有关的资源

FileInputStream

java.io.FileInputStream类主要用于从输入流中以字节流的方式读取图像数据等。

常用方法说明
FileInputStream(String name)根据参数指定的文件路径名来构造对象
int read()从输入流中读取单个字节的数据并返回,返回-1表示读取到末尾
int read(byte[] b, int off, int len)从此输入流中将最多len个字节的数据读入字节数组中,返回读取到的字节个数,返回-1表示读取到末尾
int read(byte[] b)从此输入流中将最多 b.length 个字节的数据读入字节数组中,返回读取到的字节个数,返回-1表示读取到末尾
void close()关闭流对象并释放有关的资源
int available()获取输入流所关联文件的大小

BufferedOutputStream

java.io.BufferedOutputStream类主要用于描述缓冲输出流,此时不用为写入的每个字节调用底层系统。

常用方法说明
BufferedOutputStream(OutputStream out)根据参数指定的引用来构造对象
BufferedOutputStream(OutputStream out, int size)根据参数指定的引用和缓冲区大小来构造对象
void write(int b)写入单个字节
void write(byte[] b, int off, int len)写入字节数组中的一部分数据
void write(byte[] b)写入参数指定的整个字节数组
void flush()刷新流
void close()关闭流对象并释放有关的资源

BufferedInputStream

java.io.BufferedInputStream类主要用于描述缓冲输入流。

常用方法说明
BufferedInputStream(InputStream in)根据参数指定的引用构造对象
BufferedInputStream(InputStream in, int size)根据参数指定的引用和缓冲区大小构造对象
int read()读取单个字节
int read(byte[] b, int off, int len)读取len个字节
int read(byte[] b)读取b.length个字节
void close()关闭流对象并释放有关的资源

BufferedWriter

java.io.BufferedWriter类主要用于写入单个字符、字符数组以及字符串到输出流中。

常用方法说明
BufferedWriter(Writer out)根据参数指定的引用来构造对象
BufferedWriter(Writer out, int sz)根据参数指定的引用和缓冲区大小来构造对象
void write(int c)写入单个字符到输出流中
void write(char[] cbuf, int off, int len)将字符数组cbuf中从下标off开始的len个字符写入输出流中
void write(char[] cbuf)将字符串数组cbuf中所有内容写入输出流中
void write(String s, int off, int len)将参数s中下标从off开始的len个字符写入输出流中
void write(String str)将参数指定的字符串内容写入输出流中
void newLine()用于写入行分隔符到输出流中
void flush()刷新流
void close()关闭流对象并释放有关的资源

BufferedReader

java.io.BufferedReader类用于从输入流中读取单个字符、字符数组以及字符串。

常用方法说明
BufferedReader(Reader in)根据参数指定的引用来构造对象
BufferedReader(Reader in, int sz)根据参数指定的引用和缓冲区大小来构造对象
int read()从输入流读取单个字符,读取到末尾则返回-1,否则返回实际读取到的字符内容
int read(char[] cbuf, int off, int len)从输入流中读取len个字符放入数组cbuf中下标从off开始的位置上, 若读取到末尾则返回-1,否则返回实际读取到的字符个数
int read(char[] cbuf)从输入流中读满整个数组cbuf
String readLine()读取一行字符串并返回,返回null表示读取到末尾
void close()关闭流对象并释放有关的资源

PrintStream

java.io.PrintStream类主要用于更加方便地打印各种数据内容。

常用方法说明
PrintStream(OutputStream out)根据参数指定的引用来构造对象
void print(String s)用于将参数指定的字符串内容打印出来
void println(String x)用于打印字符串后并终止该行
void flush()刷新流
void close()用于关闭输出流并释放有关的资源

PrintWriter

java.io.PrintWriter类主要用于将对象的格式化形式打印到文本输出流。

常用方法说明
PrintWriter(Writer out)根据参数指定的引用来构造对象
void print(String s)将参数指定的字符串内容打印出来
void println(String x)打印字符串后并终止该行
void flush()刷新流
void close()关闭流对象并释放有关的资源

OutputStreamWriter

java.io.OutputStreamWriter类主要用于实现从字符流到字节流的转换。

常用方法说明
OutputStreamWriter(OutputStream out)根据参数指定的引用来构造对象
OutputStreamWriter(OutputStream out, String charsetName)根据参数指定的引用和编码构造对象
void write(String str)将参数指定的字符串写入
void flush()刷新流
void close()用于关闭输出流并释放有关的资源

InputStreamReader

java.io.InputStreamReader类主要用于实现从字节流到字符流的转换。

常用方法说明
InputStreamReader(InputStream in)根据参数指定的引用来构造对象
InputStreamReader(InputStream in, String charsetName)根据参数指定的引用和编码来构造对象
int read(char[] cbuf)读取字符数据到参数指定的数组
void close()用于关闭输出流并释放有关的资源

DataOutputStream

java.io.DataOutputStream类主要用于以适当的方式将基本数据类型写入输出流中。

常用方法说明
DataOutputStream(OutputStream out)根据参数指定的引用构造对象OutputStream类是个抽象类,实参需要传递子类对象
void writeInt(int v)用于将参数指定的整数一次性写入输出流,优先写入高字节
void close()用于关闭文件输出流并释放有关的资源

DataInputStream

java.io.DataInputStream类主要用于从输入流中读取基本数据类型的数据。

常用方法说明
DataInputStream(InputStream in)根据参数指定的引用来构造对象InputStream类是抽象类,实参需要传递子类对象
int readInt()用于从输入流中一次性读取一个整数数据并返回
void close()用于关闭文件输出流并释放有关的资源

ObjectOutputStream

  • java.io.ObjectOutputStream类主要用于将一个对象的所有内容整体写入到输出流中。
  • 只能支持将 java.io.Serializable 接口的对象写入流中。
  • 类通过实现 java.io.Serializable 接口以启用其序列化功能。
  • 序列化:将一个对象需要存储的相关信息有效组织成字节序列的转化过程。
常用方法说明
ObjectOutputStream(OutputStream out)根据参数指定的引用来构造对象
void writeObject(Object obj)用于将参数指定的对象整体写入到输出流中
void close()用于关闭输出流并释放有关的资源

ObjectInputStream

  • java.io.ObjectInputStream类主要用于从输入流中一次性将对象整体读取出来。
  • 反序列化:将有效组织的字节序列恢复为一个对象及相关信息的转化过程。
常用方法说明
ObjectInputStream(InputStream in)根据参数指定的引用来构造对象
Object readObject()主要用于从输入流中读取一个对象并返回 无法通过返回值来判断是否读取到文件的末尾
void close()用于关闭输入流并释放有关的资源

RandomAccessFile

java.io.RandomAccessFile类主要支持对随机访问文件的读写操作。

常用方法说明
RandomAccessFile(String name, String mode)根据参数指定的名称和模式构造对象:
r:以只读方式打开
rw:打开以便读取和写入
rwd:打开以便读取和写入,同步文件内容的更新
rws:打开以便读取和写入,同步文件内容和元数据的更新
int read()读取单个字节的数据
void seek(long pos)用于设置从此文件的开头开始测量的文件指针偏移量
void write(int b)将参数指定的单个字节写入
void close()用于关闭流并释放有关的资源
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亦翼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值