IO流体系结构

IO流原理

I/O是Input/Output的缩写, I/O技术是非常实用的技术,用于处理设备之间的数据传输。如读/写文件,网络通讯等。

输入input:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。
输出output:将程序(内存)数据输出到磁盘、光盘等存储设备中。

Java程序中,对于数据的输入/输出操作以 **流(stream)**的方式进行。

java.io包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过标准的方法输入或输出数据。

IO流分类

操作单元:字节流和字符流
流的流向:输入流和输出流
流的角色:节点流和处理流

IO流体系结构_第1张图片

IO流体系结构

抽象基本类           节点流(文件流)                                 缓冲流(处理流的一种)
InputStream          FileInputStream (read(byte[] buffer))         BufferedInputStream (read(byte[] buffer))
OutputStream         FileOutputStream (write(byte[] buffer,0,len)  BufferedOutputStream (write(byte[] buffer,0,len) / flush()
Reader               FileReader (read(char[] cbuf))                BufferedReader (read(char[] cbuf) / readLine())
Writer               FileWriter (write(char[] cbuf,0,len)          BufferedWriter (write(char[] cbuf,0,len) / flush()

抽象基本类

InputStream & Reader
  1. InputStreamReader 是所有 输入流的基类。

  2. InputStream(典型实现:FileInputStream)

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

  3. Reader(典型实现:FileReader)

    int read()
    int read(char [] c)
    int read(char [] c, int off, int len)

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

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

InputStream
  1. int read()

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

  2. int read(byte[] b)

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

  3. int read(byte[] b, int off,int len)

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

  4. public void close() throws IOException

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

Reader
  1. int read()

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

  2. int read(char[] cbuf)

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

  3. int read(char[] cbuf,int off,int len)

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

  4. public void close() throws IOException

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

OutputStream & Writer
  1. OutputStream 和 Writer 也非常相似:

    void write(int b/int c);
    void write(byte[] b/char[] cbuf);
    void write(byte[] b/char[] buff, int off, int len);
    void flush();
    void close(); 需要先刷新,再关闭此流

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

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

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

OutputStream
  1. void write(int b)

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

  2. void write(byte[] b)

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

  3. void write(byte[] b,int off,int len)

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

  4. public void flush()throws IOException

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

  5. public void close() throws IOException

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

Writer
  1. void write(int c)

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

  2. void write(char[] cbuf)

    写入字符数组。

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

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

  4. void write(String str)

    写入字符串。

  5. void write(String str,int off,int len)

    写入字符串的某一部分。

  6. void flush()

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

  7. public void close() throws IOException

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

结构图

IO流体系

IO流体系结构_第2张图片

操作方式分类结构图

IO流体系结构_第3张图片

操作对象分类结构图

IO流体系结构_第4张图片

你可能感兴趣的:(java基础)