IO流的概念

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

基本分类

  • 按照读写数据的基本单位不同, 分为字节流字符流

    • 字节流: 以字节为单位进行数据读写的流, 可以读写任意类型的文件
    • 字符流: 以字符(2个字节) 为单位进行数据读写的流,只能读写文本文件
  • 按照读写数据的方向不同, 分为输入流输出流.(站在程序的角度)

    • 输入流: 主要指从文件中读取数据内容输入到程序中,也就是读文件
    • 输出流: 主要指将程序中的数据内容输出到文件中,也就是写文件
  • 按照流的角色不同, 分为节点流处理流

    • 节点流: 主要指直接和输入输出源对接的流
    • 处理流: 主要指需要建立在节点流的基础之上的流

体系结构

image.png

image.png

相关流的详解

FileWriter

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

常用方法

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

FileReader

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

常用方法

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

FileOutputStream

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

常用方法

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

FileInputStream

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

常用方法

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

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()
读取len个字节int read(byte[] b, int off, int len)
读取b.length个字节int read(byte[] b)
关闭流对象并释放有关的资源void close()

BufferedWriter

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

常用方法

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

BufferedReader

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

常用方法

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

PrintStream

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

常用方法

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

PrintWriter

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

常用方法

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

OutputStreamWriter

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

常用方法

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

InputStreamReader

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

常用方法

功能介绍方法声明
根据参数指定的引用来构造对象InputStreamReader(InputStream in)
根据参数指定的引用和编码来构造对象InputStreamReader(InputStream in, String charsetName)
读取字符数据到参数指定的数组int read(char[] c)
用于关闭输出流并释放有关的资源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()

序列化版本号

序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常(InvalidCastException)

transient关键字

transient是Java语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。

经验的分享

当希望将多个对象写入文件时, 通常建议将多个对象放入一个集合中, 然后将集合这个整体看做一个对象写入输出流中. 此时只需要调用一次readObject方法就可以将整个集合的数据读取出来,从而避免了通过返回值进行是否达到文件末尾的判断


chain_xx_wdm
64 声望2 粉丝

1.领养代替买卖