Java IO

2024-04-23 19:47:39 浏览数 (2)

1 IO流的分类

1.1 按数据流的方向:输入流、输出流

此输入、输出是相对于我们写的代码程序而言。

  • 输入流:从别的地方(本地文件,网络上的资源等)获取资源输入到我们的程序中。
  • 输出流:从我们的程序中输出到别的地方(本地文件), 将一个字符串保存到本地文件中,就需要使用输出流。
1.2 按处理数据单位不同:字节流、字符流

1字符=2字节、1字节(byte)=8位(bit)、一个汉字占两个字节长度。

  • 字节流:每次读取(写出)一个字节,当传输的资源文件有中文时,就会出现乱码。
  • 字符流:每次读取(写出)两个字节,有中文时使用该流就可以正确传输显示中文。

字节流和字符流的区别:

字节流读取单个字节,字符流读取单个字符(一个字符根据编码的不同,对应的字节也不同,如 UTF-8 编码是 3 个字节,中文编码是 2 个字节。)字节流用来处理二进制文件(图片、MP3、视频文件),字符流用来处理文本文件(可以看做是特殊的二进制文件,使用了某种编码,人可以阅读)。简而言之,字节是个计算机看的,字符才是给人看的。

能使用字节流不一定能使用字符流,能使用字符流一定能使用字节流。

1.3 按功能不同:节点流、处理流
  • 节点流:以从或向一个特定的地方(节点)读写数据,如FileInputStream。
  • 处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写,如BufferedReader。处理流的构造方法总是要带一个其他的流对象做参数,一个流对象经过其他流的多次包装,

2 四大抽象类

IO所谓的四大抽象类就是:InputStream、OutputStream、Reader、Writer。

2.1 InputStream

字节输入流的父类,数据单位为字节。

节点流

  • FileInputStream:文件字节输入流(操作对象为File文件对象)
  • ByteArrayInputStream:字节数组输入流(操作对象为字节数组)

处理流

  • FilterInputStream:过滤字节输入流(简单的实现了InputSteam类,一般用它的子类BufferedInputSteam、DataInputStream等)
  • BufferedInputStream:字节输入缓冲流
  • DataInputStream:基本数据类型输入处理流
  • ObjectInputStream:引用数据类型输入处理流(对象反序列化)

常用方法

  • int read(); 从输入流中读取下一个字节
  • void close(); 关闭流
2.2 OutputStream

字节输出流的父类,数据单位为字节。

字节流

  • FileOutputStream:文件字节输出流(操作对象为File文件对象)
  • ByteArrayOutputStream:字节数组输出流(操作对象为字节数组)

处理流

  • FilterOutputStream:过滤字节输出流(简单的实现了OutputStream类,一般用它的子类BufferedOutputSteam、DataOutputStream等)
  • BufferedOutputStream:字节输出缓冲流
  • DataOutputStream:基本数据类型输出处理流
  • ObjectOutputStream:引用数据类型输出处理流(对象序列化)

常用方法

  • void write(int b); 将一个integer数组长度写入此流
  • void flush(); 刷新此流
  • void close(); 关闭该流并释放与之相关的所有资源
2.3 Reader

字符输入流的父类,数据单位为字符。

节点流

  • FileReader:文件字符输入流(操作对象为File文件对象)
  • CharArrayReader:字符数组输入流(操作对象为字符数组)

处理流

  • BufferedReader:字符输入缓冲流
  • InputStreamReader:字符输入格式处理流(可以设置字符编码等)

常用方法

  • int read(); 读取单个字符
  • int read(char[] cbuf, int off , int len ); 将字符读入数组的某一部分
  • void close(); 关闭该流并释放与之相关的所有资源
2.4 Writer

字符输出流的父类,数据单位为字符。

节点流

  • FileWriter:文件字符输出流(操作对象为File文件对象)
  • CharArrayWriter:字符数组输出流(操作对象为字符数组)

处理流

  • BufferedWriter:字符输出缓冲流
  • OutputStreamWriter:字符输出格式处理流(可以设置字符编码等)

常用方法

  • void writer(); 创建一个字符流
  • void flush(); 刷新此流
  • void close(); 关闭该流并释放与之相关的所有资源

0 人点赞