- I/O流的概念
- InputStream
- OutputStream
- Reader
- Writer
- InputStreamReader
- OutputStreamWriter
- Java为输入输出准备了繁杂的编程接口,结合文件系统和网络通信的知识,可以开发出许许多多精彩纷呈的应用程序。
- Java中主要有4个输入输出的抽象类,InputStream、OutputStream、Reader和Writer。
- 字节流:InputStream和OutputStream。
- 字符流:Reader和Writer。
- ObjectInputStream和ObjectOutputStream分别继承自InputStream和OutputStream,用于从输入流读取Java对象和向输出流中输出Java对象。
- 可以被输入输出的对象必须实现Serializable接口,即实现序列化。
- InputStream是一个抽象类,它是所有面向字节的输入流的父类。
- InputStream的主要方法有:
- int read(byte[] b) —— 读取字节到字节数组中,返回读取的字节数。
- int read(byte[] b, int off, int len) —— 读取最多len个字节到字节数组b中,在字节数组b中从 下标off开始存放,返回值是实际读取的字节数。
- void close() —— 关闭输入流,并释放关联的资源。
- long skip(long n) —— 跳过n个字节。
- OutputStream是一个抽象类,它是所有面向字节的输出流的父类。
- OutputStream的主要方法有:
- void write(byte[] b) —— 将字节数组输出到输出流。
- void write(byte[] b, int off, int len) —— 输出字节数组b中从下标off开始的len个字节。
- void close() —— 关闭输出流,并释放关联的资源。
- void flush() —— 刷新输出流,迫使缓冲的字节输出。
- Reader是一个抽象类,它是所有面向字符的输入流的父类。
- Reader的主要方法有:
- int read(char[] cbuf) —— 将字符读到数组中。
- abstract int read(char[] cbuf, int off, int len) —— 将len长的字符读到数组中下标off开始的数组元素中。
- void close() —— 关闭输入字符流,并释放关联的资源。
- Writer是一个抽象类,它是所有面向字符的输出流的父类。
- Writer的主要方法有:
- void write(char[] cbuf) —— 输出字符数组。
- void write(char[] cbuf, int off, int len) —— 输出字符数组中指定的字符。
- void write(String str) —— 输出一个字符串。
- void write(String str, int off, int len) —— 输出一个字符串的子串。
- abstract void flush() —— 刷新输出流。
- abstract void close() —— 关闭输出流。
- InputStreamReader是从字节流向字符流转化的桥梁。
- InputStreamReader读取字节,使用 特定的字符集解码成字符。
- InputStreamReader的主要方法有:
- InputStreamReader(InputStream in) —— 使用系统默认字符集构建InputStreamReader。
- InputStreamReader(InputStream in, Charset cs) —— 使用给定的字符集构建InputStreamReader。
- InputStreamReader(InputStream in, String charsetName) —— 使用字符集名称构建InputStreamReader。
- int read(char[] cbuf, int offset, int length) —— 读入字符到字符数组中的指定位置。
- String getEncoding() —— 返回字符集的名称。
- void close() —— 关闭输入流。
- OutputStreamWriter是字符流向字节流转换的桥梁。
- 写入OutputStreamWriter的字符将被使用特定的字符集编码成字节。
- OutputStreamWriter主要的方法有:
- OutputStreamWriter(OutputStream out) —— 创建一个使用默认字符集编码的OutputStreamWriter。
- OutputStreamWriter(OutputStream out, Charset cs) —— 创建指定字符集的OutputStreamWriter。
- OutputStreamWriter(OutputStream out, String charsetName) —— 创建指定字符集名称的OutputStreamWriter。
- void write(char[] cbuf, int off, int len) —— 输出字符数组的一部分。
- void write(String str, int off, int len) —— 输出字符串的一部分。
文本文件读写
- FileReader —— 从文本文件中读取字符。
- FileWriter —— 创建文本文件并往其中写入字符数据。
- BufferedReader —— 有缓冲,具有readLine()方法,可以对换行符进行鉴别,一行一行地读取。
- BufferedWriter —— 有缓冲,具有newLine()方法,可以写入换行符。
二进制文件的读写
- FileInputStream —— 从二进制文件读入字节流。
- FileOutputStream —— 向二进制文件写入字节流。
- BufferedInputStream —— 有缓冲的字节输入流。
- BufferedOutputStream —— 有缓冲的字节输出流。
随机文件读写
- 随机读写是相对顺序读写而言的,所谓随机读写,是指可以在任何时候将存取文件的指针指向文件内容的任何位置。
- RandomAccessFile —— Java用于支持随机文件读写的类,主要方法有:
- RandomAccessFile(File file, String mode) —— mode为打开方式,"r"为只读,"rw"为读写。
- void setLength(long newLength) —— 设置文件的长度。
- void seek(long pos) —— 设置文件指针的位置,即从文件开始的偏移字节数。
处理压缩文件
- java.util.zip包中提供了一些类,可以处理压缩的输入输出流。
- GZIPOutputStream和ZipOutputStream可分别把数据压缩成GZIP格式和Zip格式。
- GZIPInputStream和ZipInputStream可以分别把压缩成GZIP或Zip的数据解压缩恢复原状。
对象序列化的原理
- 通过输出流保存的对象都获得一个序列号。
- 当要保存一个对象时,先检查该对象是否被保存了。
- 如果以前保存过,只需写入“与已经保存的具有序列号的对象相同”的标记;否则,保存该对象。
- Java对象序列化机制专门设计了一个没有定义任何方法的Serializable接口,当一个Java对象实现该接口后,Java将为其提供一个唯一的序列号。
对象序列化的概念
- Java的对象序列化是一种使得对象能够被存储和被传输的一种机制。
- 支持序列化的类需要实现Serializable接口,这个接口没有任何方法。
- java.io包提供了对象输入输出流ObjectInputStream和ObjectOutputStream,可以直接把Java对象输入输出成字节流。
- 这两个输入输出类不会保存和读取对象中的transient和static类型的变量,这使得我们可以选择性地存储必要的信息。
- JDK提供的大多数类都实现了Serializable接口,这意味着它们的实例都能够被序列化,能够被存储和传输。
- 一个Java类的实例能否被序列化,可以通过JDK的bin目录下的serialver命令来判断,例如serialver java.util.Vector。
- 没有实现Serializable接口的类的实例,不能基于对象输入输出流进行存取,否则将抛出NotSerializableException。
对象序列化的原理
- 通过输出流保存的对象都获得一个序列号。
- 当要保存一个对象时,先检查该对象是否被保存了。
- 如果以前保存过,只需写入“与已经保存的具有序列号的对象相同”的标记;否则,保存该对象。
- Java对象序列化机制专门设计了一个没有定义任何方法的Serializable接口,当一个Java对象实现该接口后,Java将为其提供一个唯一的序列号。
输入输出流
最新推荐文章于 2024-08-26 16:40:46 发布