文章目录
- 前言
- 一、流的概述
- 二、输入/输出流
- 1.字节/字符输入流
- 2.字节/字符输出流
- 总结
前言
在变量、数组和对象中储存的数据是暂时的,程序结束后它们就会丢失。如果想要永久地储存程序创建的数据,需要将其保存在磁盘文件中,这样就可以在程序中使用它们。Java的I/O技术可以将数据保存到文本文档、二进制文件,甚至ZIP压缩文件中,以达到永久保存数据的要求。掌握I/O处理技术能够提高对数据的处理能力。
一、流的概述
流是一组有序的数据序列,根据操作的类型,可分为输入流和输出流两种。I/O流(输入/输出)流提供了一条通道程序,可以将源中的字节序列送到目的地。例如,使用java代码,获取/更改指定文本文档内容。
二、输入/输出流
Java语言定义了许多类专门负责各种方式的输入/输出,这些类都放于 java.io包中。使用I/O技术,需要导入java.io包。其中所有的输入流类都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类;而所有的输出流类都是抽象类OutputStream(字节输出流)或抽象类Writer(字符输出流)的子类。
1.输入流
(1)字节输入流
InputStrean抽象类的层次结构图
InputStream类是字节输入流的抽象类,是所有字节输入流的父类。该类中的所有方法遇到错误时都会引发IOException异常。
以下是对该抽象类的方法介绍:
方法 | 功能描述 |
read() | 从输入流中读取数据的下一个字节。返回0~255范围内的int字节值。如果已经达到流末尾而没有可用的字节,则返回-1 |
read(byte[] b) | 从输入流中读出一定长度的字节, |
mark(int readlimit) | 在输入流的当前位置放置一个标记,readlimit参数告知此输入流在标记位置失效之前允许读取的字节数 |
reset() | 将输入指针返回到当前所走的标记处 |
skip(long n) | 跳过输入流上的n个字节,并返回值为实际跳过的字节数 |
makeSupported() | 如果当前流支持mark()/reset()操作,就返回true |
close() | 关闭此输入流并释放与该流关联的所有系统资源 |
并不是所有的InputStream类的子类都支持InputStream中定义的所有方法。如skip()、mark()、reset()等方法只对某些子类支持。
(2)字符输入流
Java中的是Unicode编码,是双字节的。InputStream类是用来处理字节的,并不适用与处理字符文本。为此Java为字符文本的输入专门提供了一套单独的Reader类。Reader类是字符输入流的抽象类,所有字符输入流类都是Reader抽象类的子类。
Reader类是字符输入流的抽象类。
Reader抽象类的层次结构图
Reader类中的方法与InputStream类中的方法相似,可查看JDK文档。
2.输出流
(1)字节输出流
OutputStream类的层次结构图
OutputStream类是字节输出流的抽象类,此抽象类是所有字节输出类的父类。OutputStream类中的所有方法均返回void,在遇到错误时会引发IOException异常。
以下是对该抽象类的方法介绍:
方法 | 功能介绍 |
write(int b) | 将指定的字节写入此输出流 |
write(byte[] b) | 将b个字节从指定的byte数组写入此输出流 |
write(byte[] b,int off,int len) | 将指定byte数组中从偏移量off开始的len个字节写入此输出流 |
flush() | 彻底完成输出,并清空缓存区 |
close() | 关闭输出流 |
(2)字符输出流
Writer类是字符输出流的抽象类,Writer类还是所有字符输出类的父类。
Writer类的层次结构图
Writer类中的方法与OutputStream类中的方法相似,可查看JDK文档。
总结
以上就是关于java的I/O技术概述,本文粗略地描述了整体纲要,然而想要具体深入地学习I/O,可以接下来与博主共勉,欢迎在评论区中指正错误和讨论。