IO流学习,IO流概述

一、IO流

1.1 术语

流(stream) : 二进制流(高低电平 高电平 1 低电平0)

输入/输出源 : 二进制流的来源与目的地, 通常是外部设备(硬盘、键盘、文件、网络等)

Java程序通过stream,以统一的API来操作不同的输入/输出源

 

1.2 流的分类

1.2.1按照流的流向划分

  • 输入流 : InputStream (字节输入流抽象类) Reader(字符输入流抽象类)

  • 输出流 : OutputStream(字节输出流抽象类) Writer(字符输出流抽象类)

 

1.2.2按照传输的数据单元

  • 字节流 : 传输的数据单元是8位的字节

    InputStream (字节输入流抽象类) 、OutputStream(字节输出流抽象类)

  • 字符流 : 输出的数据单元通常是16位的字符(2个字节),最终在链路层还 是会转为字节流

    Reader(字符输入流抽象类) 、 Writer(字符输出流抽象类)

 

1.2.3按照角色功能来划分

节点流:直接连接外部IO设备(物理节点)

处理流(包装流):处理已存在流的流,没有直接连接物理节点,而是连接的已存在的流(体现了装饰设计模式(23种设计模式))

 

1.3 字节输入流常用的API

  • int read(): 每次读取一个字节,返回当前字节的十进制编码,如果没有读到字节数据就返回-1

  • int read(byte[] bytes):将每次读取的字节存入指定的字节数组,返回的是读取的字节个数,如果没有读到数据返回-1

如果指定的字节数组 bytes.lenght <= 文件中的字节个数,一次读取 bytes.lenght个, 那么如果读取的字节个数 < bytes.length, 会将读取到的字节覆盖数组下标0开始到len-1下标

 

  • int read(bytes[] bytes, int offset, int len): 将读取的指定的字节个数(len)存入指定的字节数组(bytes)的指定下标(offset)

 

  • String(bytes[] bytes, int offset, int len): 通过指定的字节数组,下标,长度,通常对象为英文字母

  • String(bytes[] bytes, int offset, int len, String charset): 通过指定的字节数组,下标,长度,如果有中文,通过String charset参数指定编码

1.4 字节输出流OutputStream

  • void write(int data): 每次写一个字节数据

  • void write(byte[] bytes):每次写一个字节数组

  • void write(bytes[] bytes, int offset, int len): 每次写一个字节数组指定的下标开始,指定的len参数字节个数

总结:

  之所以会有字符流的存在,是因为通常中文编码至少都会占用两个字节,如GBK编码和UTF-8编码,使用字节流读取字符时,

  由于自身容量只有8bit,所以不支持存储一个字符,拿到的编码就是不完整的,这个时候就需要使用字符流。

  

   

posted @ 2022-02-24 15:38  MrPPP  阅读(77)  评论(0)    收藏  举报