参考笔记:【Java基础-3】吃透Java IO:字节流、字符流、缓冲流_javaio-CSDN博客
目录
3. Java的char类型与 Unicode、UTF-16 的联系
4.1 字符输入流/输出流——FileReader/FileWriter
5.2 字节输入流/输出流——FileInputStream/FileOutputStream
1.IO流简介
1.1 什么是IO流?
IO,即 Input 、 Output ,也就是输入和输出,指应用程序和外部设备之间的数据传递,常见的外部设备包括磁盘文件、管道、网络连接
Java 中是通过流处理 IO 的,那么什么是流?
流(Stream),是一个抽象的概念,是指一连串的数据(字符或字节),是以先进先出的方式发送信息的通道
当 Java 程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是磁盘文件、内存、网络连接等等。类似地,当 Java 程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中 "流"动 一样
一般来说关于流的特性有下面几点:
① 先进先出:最先写入的数据会被最先读出
② 顺序存取:可以一个接一个地往流中写入一串字节,读出时也将按写入顺序读取一串字节,不能随机访问中间的数据
③ 只读或只写:每个流只能是输入流或输出流的一种,不能同时具备两个功能,输入流只能进行读操作,输出流只能进行写操作。在一个数据传输通道中,如果既要写入数据,又要读取数据,则要分别提供两个流
1.2 IO流的分类
-
按数据的流向分类:输入流和输出流
-
输入流 :读取外部数据(磁盘、光盘等存储设备的数据)到 Java 程序(内存)中;输入流以 InputStream、Reader 结尾
-
输出流 :将 Java 程序(内存)数据输出到磁盘、光盘等存储设备中;输出流以 OutputStream、Writer 结尾
-
-
按数据的操作单位分类:字节流和字符流
-
字节流 :以数据单位为 8 位的字节为单位;字节流以 InputStream、OutputStream 结尾
-
字符流 :以数据单元为 16 位的字符为单位;字符流以 Reader、Writer 结尾
-
-
按流的功能分类:节点流和处理流
-
节点流:直接操作数据读写的流类,比如 FileInputStream
-
处理流:也称为包装流,用来包装节点流,给节点流提供更加强大的读写功能
-
1.3 字符流和字节流的其他区别
除了操作的数据单位的区别,还有以下区别:
-
操作的文件类型不同:
-
字符流 :字符流用于处理纯文本类型文件,如 .txt、.cpp、.txt、.java、.c、.cpp、.py 等,不能处理图像、视频等非文本文件
-
字节流 :字节流可以操作一切类型文件,但通常用来用来处理 .img、.mp3、.mp4、.ppt、.doc 等二进制文件
-
-
缓冲区:
-
字符流:字符输出流本身带有缓冲区(字符输入流好像没有),缓冲区是一个长度为 1024 的 char 类型数组
-
字节流:没有缓冲区
-
验证:字符输出流带有缓冲区
查看所有字符输出流的基类 Writer ,如下:
可以看到,字符输出流自带的缓冲区确实是一个长度为 1024 的 char 类型数组 writeBuffer
1.4 Java IO流体系图
为了更好的阅读体验,建议大家对字符编码、Java 的 char 类型有比较深的了解
2.字符编码详解
链接如下:
① 字符集、编码编码介绍
② ASCII字符集 + 编码
③ GB2312字符集 + 编码
④ GBK 字符集 + 编码
⑤ Unicode 字符集
⑥ Unicode 字符集的三种编码方案:UTF-32、UTF-16、UTF-8
⑦ 乱码的本质原因
3. Java的char类型与 Unicode、UTF-16 的联系
链接如下:
① Java 的 char 类型底层设计
② Java 中关于 Unicode 的常用 API
③ 编码和解码
④ 乱码问题
4.节点流
4.1 字符输入流/输出流——FileReader/FileWriter
链接如下:
① FileReader 构造器、常用方法
② FileReader 读取文件案例演示
③ FileWriter 构造器、常用方法
④ FileWriter 写入文件案例演示
⑤ FileReader + FileWriter 拷贝文本文件
5.2 字节输入流/输出流——FileInputStream/FileOutputStream
链接如下:
① FileInputStream 构造器、常用方法
② FileInputStream 读取文件案例演示
③ FileOutputStream 构造器、常用方法
④ FileOutputStream 写入文件案例演示
⑤ FileReader + FileWriter 拷贝文件
5.处理流
此部分讲解 3 个处理流:缓冲流、转换流、序列化流,再加 标准输入\输出流
链接如下:
① 缓冲字节流 BufferedInputStram、BufferedOutputStream 的原理、使用案例、与普通字节流的效率对比
② 缓冲字符流 BufferedReader、BufferedWriter 的原理、使用案例、与普通字符流的效率对比
③ 转换流 InputStreamReader、OutputStreamWriter 的引入、作用、使用案例
④ 序列化流 ObjectInputStream、ObjectOutputStream 的原理、作用、使用案例
⑤ 标准输入\输出流 System.in 、System.out