在Java中,流(Stream)的分类主要有以下两种:
1.字节流(Byte Stream):以8位字节为基础进行数据传输,一次读取和写入一个字节,常用的字节流类有InputStream、OutputStream、FileInputStream、FileOutputStream等。
2.字符流(Character Stream):以字符为基础进行数据传输,一次读取和写入一个字符,常用的字符流类有Reader、Writer、FileReader、FileWriter等。
字节流和字符流最大的区别在于处理单元不同,字节流以一个字节为最小处理单元,而字符流以一个字符为最小处理单元。
由于字符流可以使用缓冲区技术,因此在处理文本文件时,字符流通常比字节流更加方便和高效。
此外,根据数据处理方向的不同,流还可以分为输入流(Input Stream)和输出流(Output Stream)。
输入流从外部设备或数据源读取数据,输出流则将数据写入到外部设备或数据源中。在Java中,所有的流都是通过这两种基本流实现的。
Java中的IO流分为字符流和字节流,它们各自有不同的输入输出流类和子类。这里简要介绍一下它们的主要类(都是抽象类)及子类:
1. 字节输入流(InputStream)及其子类:
- FileInputStream:用于从文件中读取数据的流。
- FilterInputStream:提供装饰器模式的基础类,用于对其他字节输入流进行装饰。
- BufferedInputStream:带缓存的字节输入流,可提高读取效率。
- DataInputStream:用于从输入流中读取基本数据类型(int, double, boolean等)的流。
- ObjectInputStream:用于从输入流中反序列化对象的流。
- SequenceInputStream:用于将多个输入流合并成一个输入流的流。
2. 字节输出流(OutputStream)及其子类:
- FileOutputStream:用于向文件中写入数据的流。
- FilterOutputStream:提供装饰器模式的基础类,用于对其他字节输出流进行装饰。
- BufferedOutputStream:带缓存的字节输出流,可提高写入效率。
- DataOutputStream:用于向输出流中写入基本数据类型(int, double, boolean等)的流。
- ObjectOutputStream:用于向输出流中序列化对象的流。
- PrintStream:向输出流中打印数据的流。
3. 字符输入流(Reader)及其子类:
- FileReader:用于从文件中读取字符数据的流。
- BufferedReader:带缓存的字符输入流,可提高读取效率。
- InputStreamReader:将字节输入流转化为字符输入流的流,可以指定字符编码。
- FilterReader:提供装饰器模式的基础类,用于对其他字符输入流进行装饰。
4. 字符输出流(Writer)及其子类:
- FileWriter:用于向文件中写入字符数据的流。
- BufferedWriter:带缓存的字符输出流,可提高写入效率。
- OutputStreamWriter:将字节输出流转化为字符输出流的流,可以指定字符编码。
- FilterWriter:提供装饰器模式的基础类,用于对其他字符输出流进行装饰。
总之,Java中的IO流包括了丰富的类和子类,以满足不同需求的数据输入输出操作。需要根据具体的业务需求和数据处理要求选择最合适的流及其子类来进行数据处理。