Java中的IO流
前言
IO流是Java中有一个重要的概念,指的是数据从一个地点到另一个地点的过程。输入输出的介质有很多,包括:文件、网络、键盘(输入)、显示器(输出)……
原文地址:https://xuedongyun.cn/post/17650/
IO分类
Java对IO操作提供了相应的API,包含在java.io
包中。java中对流的分类包括:
- 按流向分(站在程序的角度)
- 输入流(Input)
- 输出流(Output)
- 按流的处理类型分
- 字节流
- 字符流
- 按流的功能来分
- 节点流(直接跟输入输出源交互)
- 处理流(对其他流包装的流:包装流)
常用API
Java中,几乎所有的流都是从以下四个父类继承而来的:
输入流 | 输出流 | |
---|---|---|
字节流 | java.io.InputStream | java.io.OutputStream |
字符流 | java.io.Reader | java.io.Writer |
InputStream常用方法
int available()
:获取流中可读字节数int read()
:从流中读取一个字节(0-255,-1表示已读到末尾)int read(byte[] b)
:将读取的字节存储到字节数组中,返回实际读到的长度(-1表示已读到末尾)skip(int b)
:跳过指定字节
OutputStream常用方法
write(int b)
:将一个字节写出到目标源write(byte[] b)
:将一个字节数组写出到目标输write(byte[] b,int offset,int len)
将一个字节数组,从offset开始,写出len个字节,到目标输出源
字节流
计算机中,所有文件都是以字节的形式存储的。因此可以使用字节流进行读写操作。
字节输入流
JDK对于字节输入提供了一些子类:
FileInputStream
ByteArrayInputStream
BufferedInputStream
ObjectInputStream
FileInputStream
FileInputStream
是一个针对文件的输入字节流
- 常见构造器
FileInputStream(File file)
:根据文件构建FileInputStream(String filePath)
:根据文件路径构建
- 读取文件
1 | InputStream in = new FileInputStream("C:\\data\\Test.java"); |
字节输出流
JDK对于字节输出提供了一些子类:
FileOutputStream
ByteArrayOutputStream
BufferedOutputStream
ObjectOutputStream
FileOutputStream
FileOutputStream
主要用于对文件进行写入操作
- 常用构造器
FileOutputStream(String filePath)
:基于一个标准文件的路径,创建对其操作的输出流FileOutputStream(String filePath,boolean append)
:同上,但使用追加模式FileOutputStream(File file)
:基于一个标准文件对象,创建对其操作的输出流FileOutputStream(File file,boolean append)
:同上,但使用追加模式
文件不存在会自动创建,文件存在会操作原有文件,目标不是文件而是目录会抛出异常
- 写文件
1 | // 使用了try...with...resource语法 |
字符流
字符输入流
字符输入流一般用于对文本数据进行读取操作,常见的子类:
InputStreamReader
FileReader
BufferedReader
CharArrayReader
FileReader
FileReader
是一个以字符流的形式进行文件内容读取的流,从InputStreamReader
继承而来
- 常用构造方法
FileReader(File file)
:根据文件对象,获取字符输入流FileReader(String path)
:根据文件路径,获取字符输入流
- 具体使用
1 | FileReader fr = new FileReader("C:\\data\\test.txt"); |
字符输出流
字符输出流一般用于对文本数据进行写出操作,常见的子类:
OutputStreamWriter
BufferedWriter
CharArrayWriter
FileWriter
PrintWriter
FileWriter
FileWriter是一个以字符流的形式进行文件内容写出的流,从OutputStreamWriter
继承而来
常用构造方法
FileWriter(File file)
:根据文件对象,获取字符输出流FileWriter(File file, boolean append)
:同上,但使用追加模式FileWriter(String path)
:根据文件路径,获取字符输出流FileWriter(String path, boolean append)
:同上,但使用追加模式
具体使用
1 | FileWriter fw = new FileWriter("readme.txt"); |
处理流
按流的功能来分类,可以分为:
- 节点流
- 又称低级流。直接跟输入输出源沟通
- 处理流
- 又称高级流或包装流。可以对其他流进行包装,以实现流的类型转换或效率的提升。
- 由缓冲流和转换流构成
包装使用了23种设计模式中的:装饰器模式
缓冲流
缓冲流是一种自带缓冲区的流,主要有四种
BufferedInputStream
:字节缓冲输入流BufferedOutputStream
:字节缓冲输出流BufferedReader
:字符缓冲输入流BufferedWriter
:字符缓冲输出流
缓冲流内部使用了一个默认大小为
8kb
的字节缓冲区,每次将缓冲区的空间存满之后再将数据通过流对象完成读写操作
1 | FileInputStream fis = new FileInputStream("test.txt"); |
转换流
一些需求:
字节流转换为字符流、字符流转换为字节流……
1 | InputStream is = System.in; |
- 标题: Java中的IO流
- 作者: 布鸽不鸽
- 创建于 : 2023-07-16 20:34:15
- 更新于 : 2023-07-16 23:07:30
- 链接: https://xuedongyun.cn//post/17650/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。