在Java中,流(Stream)主要用于处理输入和输出(I/O)操作。流可以分为以下几种主要类型:
按照流的方向分类
-
输入流(Input Stream)
- 从数据源读取数据,例如从文件、网络或键盘读取数据。
- 主要的输入流类:
InputStream
和Reader
。
-
输出流(Output Stream)
- 向数据目标写入数据,例如向文件、网络或控制台写数据。
- 主要的输出流类:
OutputStream
和Writer
。
按照处理的数据类型分类
-
字节流(Byte Stream)
- 处理字节数据,适用于所有类型的数据,包括二进制数据。
- 主要类:
InputStream
(输入字节流)和OutputStream
(输出字节流)。
-
字符流(Character Stream)
- 处理字符数据,专门为处理文本数据而设计,自动处理字符编码问题。
- 主要类:
Reader
(输入字符流)和Writer
(输出字符流)。
详细的流分类及其常用子类
字节流
输入字节流(InputStream)
-
FileInputStream
:从文件中读取数据。javaFileInputStream fis = new FileInputStream("file.txt"); int data = fis.read(); fis.close();
-
ByteArrayInputStream
:从字节数组中读取数据。javabyte[] buf = { 1, 2, 3 }; ByteArrayInputStream bais = new ByteArrayInputStream(buf); int data = bais.read(); bais.close();
-
BufferedInputStream
:为其他输入流提供缓冲功能,提高读取效率。javaFileInputStream fis = new FileInputStream("file.txt"); BufferedInputStream bis = new BufferedInputStream(fis); int data = bis.read(); bis.close(); fis.close();
-
DataInputStream
:读取Java原始数据类型(如int, float)的输入流。javaFileInputStream fis = new FileInputStream("file.dat"); DataInputStream dis = new DataInputStream(fis); int data = dis.readInt(); dis.close(); fis.close();
输出字节流(OutputStream)
-
FileOutputStream
:向文件中写入数据。javaFileOutputStream fos = new FileOutputStream("file.txt"); fos.write(100); fos.close();
-
ByteArrayOutputStream
:向字节数组中写入数据。javaByteArrayOutputStream baos = new ByteArrayOutputStream(); baos.write(100); byte[] bytes = baos.toByteArray(); baos.close();
-
BufferedOutputStream
:为其他输出流提供缓冲功能,提高写入效率。javaFileOutputStream fos = new FileOutputStream("file.txt"); BufferedOutputStream bos = new BufferedOutputStream(fos); bos.write(100); bos.close(); fos.close();
-
DataOutputStream
:写入Java原始数据类型(如int, float)的输出流。javaFileOutputStream fos = new FileOutputStream("file.dat"); DataOutputStream dos = new DataOutputStream(fos); dos.writeInt(100); dos.close(); fos.close();
字符流
输入字符流(Reader)
-
FileReader
:从文件中读取字符数据。javaFileReader fr = new FileReader("file.txt"); int data = fr.read(); fr.close();
-
CharArrayReader
:从字符数组中读取数据。javachar[] buf = { 'a', 'b', 'c' }; CharArrayReader car = new CharArrayReader(buf); int data = car.read(); car.close();
-
BufferedReader
:为其他字符输入流提供缓冲功能,提高读取效率。javaFileReader fr = new FileReader("file.txt"); BufferedReader br = new BufferedReader(fr); String line = br.readLine(); br.close(); fr.close();
输出字符流(Writer)
-
FileWriter
:向文件中写入字符数据。javaFileWriter fw = new FileWriter("file.txt"); fw.write("Hello"); fw.close();
-
CharArrayWriter
:向字符数组中写入数据。javaCharArrayWriter caw = new CharArrayWriter(); caw.write("Hello"); char[] chars = caw.toCharArray(); caw.close();
-
BufferedWriter
:为其他字符输出流提供缓冲功能,提高写入效率。javaFileWriter fw = new FileWriter("file.txt"); BufferedWriter bw = new BufferedWriter(fw); bw.write("Hello"); bw.close(); fw.close();
-
PrintWriter
:提供便捷的方法写入格式化表示的数据。javaPrintWriter pw = new PrintWriter("file.txt"); pw.println("Hello"); pw.close();
总结
-
字节流(Byte Stream):用于处理所有类型的数据,特别是二进制数据。
- 输入流:
InputStream
及其子类如FileInputStream
、ByteArrayInputStream
等。 - 输出流:
OutputStream
及其子类如FileOutputStream
、ByteArrayOutputStream
等。
- 输入流:
-
字符流(Character Stream):用于处理文本数据,自动处理字符编码。
- 输入流:
Reader
及其子类如FileReader
、BufferedReader
等。 - 输出流:
Writer
及其子类如FileWriter
、BufferedWriter
等。
- 输入流:
根据具体需求选择合适的流类型和子类,可以有效地处理Java中的I/O操作。