I/O流在Java中可以按照不同的方式进行分类,主要包括以下几种类型:
按照数据处理方向分类:
- 输入流(InputStream):用于从数据源读取数据的流。常见的输入流有FileInputStream、BufferedInputStream、ObjectInputStream等。
- 输出流(OutputStream):用于向目标写入数据的流。常见的输出流有FileOutputStream、BufferedOutputStream、ObjectOutputStream等。
按照数据单位分类:
- 字节流(Byte Stream):以字节为单位进行读写操作的流。常见的字节流有InputStream和OutputStream的子类,如FileInputStream、FileOutputStream等。
- 字符流(Character Stream):以字符为单位进行读写操作的流。常见的字符流有Reader和Writer的子类,如FileReader、FileWriter等。
按照功能特性分类:
- 缓冲流(Buffered Stream):提供缓冲功能,能够提高I/O操作的性能。常见的缓冲流有BufferedInputStream和BufferedOutputStream、BufferedReader和BufferedWriter等。
- 转换流(Conversion Stream):用于字符流和字节流之间的转换。常见的转换流有InputStreamReader和OutputStreamWriter等。
按照处理对象分类:
- 文件流(File Stream):用于对文件进行读写操作的流。常见的文件流有FileInputStream、FileOutputStream、FileReader和FileWriter等。
- 内存流(Memory Stream):将数据保存在内存中进行读写操作的流。常见的内存流有ByteArrayInputStream和ByteArrayOutputStream、CharArrayReader和CharArrayWriter等。
- 对象流(Object Stream):用于序列化和反序列化对象的流。常见的对象流有ObjectInputStream和ObjectOutputStream等。
具体的常用方法根据不同的流类型会有所不同。以下是一些常见的I/O流的常用方法:
字节流(InputStream/OutputStream)的常用方法:
- int read():从输入流中读取下一个字节,并返回读取的字节数据(以整数形式表示)。
- int read(byte[] buffer):从输入流中读取数据到指定的字节数组中,并返回实际读取的字节数。
- void write(int data):将指定的字节数据写入输出流。
- void write(byte[] buffer):将指定的字节数组中的数据写入输出流。
- void flush():将输出流中的缓冲数据强制刷新到目标设备。
字符流(Reader/Writer)的常用方法:
- int read():从输入流中读取下一个字符,并返回读取的字符数据(以整数形式表示)。
- int read(char[] buffer):从输入流中读取数据到指定的字符数组中,并返回实际读取的字符数。
- void write(int data):将指定的字符数据写入输出流。
- void write(char[] buffer):将指定的字符数组中的数据写入输出流。
- void flush():将输出流中的缓冲数据强制刷新到目标设备。
除了上述基本的读写方法外,还有其他一些常见的方法,例如:
- close():关闭流并释放相关的资源。
- available():返回可以从输入流中读取(或跳过)的估计剩余字节数。
此外,还可以根据具体的流类型和需求使用一些特定的方法,例如缓冲流的readLine()方法可以按行读取数据,对象流的writeObject()方法可以将对象序列化到流中。
需要根据具体的场景和需求调用适合的方法来完成相应的读写操作。