IO 概述
目录
IO 原理
-
IO流用来处理设备之间的数据传输。
-
Java程序中,对于数据的输入/输出操作以"流(stream)" 的方式进行。
-
java.io包下提供了各种"流"类和接口,用以获取不同种类的数据,并通过标准的方法输入或输出数据。
IO分类
按照流向
输入流:只能从中读取数据,而不能向其中写入数据
输出流:只能从中写入数据,而不能向其中读取数据
这个走向是以内存为基准的,即往内存中读数据是输入流,从内存中往外写是输出流。
按照操作单元
字节流
1. 将数据解释为原始的二进制数据
2. 读写均为字节数据
3. 二进制数据不需要编码和解码,比文本IO效率要高
4. 可移植(与主机编码方式无关)
5. 以byte 为单位进行传输
字符流
1. 字符流将原始数据解析成一种字符
2. 文本 数据存储依赖文件编码方式,它输入输出需要编码解码
3. 字节流:inputStream,outputStream
4. 字符流:Reader,Writer
按照流的角色
节点流:程序直接连接到实际的处理源。
处理流:对一个已存在的流进行封装。
IO 流体系
IO 流一共四十多种但都是以一下的类作为基类
输入流 | 输出流 | |
字节流 | InputStream | OutputStream |
字符流 | Reader | Writer |
File 类
- java.io.File类:文件和目录路径名的抽象表示形式,与平台无关
- File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。
- File对象可以作为参数传递给流的构造函数
File file1 = new File("C:/Users/Administrator/Desktop/file1.txt");
File file2 = new File("C:/Users/Administrator/Desktop/file.txt");
文件流
读取文件 | 输出文件 | |
字节流 | FileInputStream | FileOutputStream |
字符流 | FileReader | FileWriter |
缓冲流
读取文件 | 输出文件 | |
字节流 | BufferedFileInputStream | BufferedFileOutputStream |
字符流 | BufferedFileReader | BufferedFileWriter |
为了提高数据读写的速度,Java API提供了带缓冲功能的流类,在使用这些流类时,会创建一个内部缓冲区数组
缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法
对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush()将会使内存中的数据立刻写出
转换流
字符转字节 | 字节转字符 |
OutputStreamWriter | InputStreamReader |
转换流提供了在字节流和字符流之间的转换
字节流中的数据都是字符时,转成字符流操作更高效
打印流
字节打印流 | 字符打印流 |
PrintStream | PrintWriter |
在整个IO包中,打印流是输出信息最方便的类。
数据流
读取 | 写出 |
DataInputStream | DataOutputStream |
为了方便地操作Java语言的基本数据类型的数据,可以使用数据流。
数据流有两个类:(用于读取和写出基本数据类型的数据)
DataInputStream 和 DataOutputStream
分别“套接”在 InputStream 和 OutputStream 节点流上