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对于字节输入提供了一些子类:
FileInputStreamByteArrayInputStreamBufferedInputStreamObjectInputStream
FileInputStream
FileInputStream是一个针对文件的输入字节流
- 常见构造器
FileInputStream(File file):根据文件构建FileInputStream(String filePath):根据文件路径构建
- 读取文件
1 | InputStream in = new FileInputStream("C:\\data\\Test.java"); |
字节输出流
JDK对于字节输出提供了一些子类:
FileOutputStreamByteArrayOutputStreamBufferedOutputStreamObjectOutputStream
FileOutputStream
FileOutputStream主要用于对文件进行写入操作
- 常用构造器
FileOutputStream(String filePath):基于一个标准文件的路径,创建对其操作的输出流FileOutputStream(String filePath,boolean append):同上,但使用追加模式FileOutputStream(File file):基于一个标准文件对象,创建对其操作的输出流FileOutputStream(File file,boolean append):同上,但使用追加模式
文件不存在会自动创建,文件存在会操作原有文件,目标不是文件而是目录会抛出异常
- 写文件
1 | // 使用了try...with...resource语法 |
字符流
字符输入流
字符输入流一般用于对文本数据进行读取操作,常见的子类:
InputStreamReaderFileReaderBufferedReaderCharArrayReader
FileReader
FileReader是一个以字符流的形式进行文件内容读取的流,从InputStreamReader继承而来
- 常用构造方法
FileReader(File file):根据文件对象,获取字符输入流FileReader(String path):根据文件路径,获取字符输入流
- 具体使用
1 | FileReader fr = new FileReader("C:\\data\\test.txt"); |
字符输出流
字符输出流一般用于对文本数据进行写出操作,常见的子类:
OutputStreamWriterBufferedWriterCharArrayWriterFileWriterPrintWriter
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 进行许可。