Java中有几种类型的流

在Java中,流(Stream)主要用于处理输入和输出(I/O)操作。流可以分为以下几种主要类型:

按照流的方向分类

  1. 输入流(Input Stream)

    • 从数据源读取数据,例如从文件、网络或键盘读取数据。
    • 主要的输入流类:InputStreamReader
  2. 输出流(Output Stream)

    • 向数据目标写入数据,例如向文件、网络或控制台写数据。
    • 主要的输出流类:OutputStreamWriter

按照处理的数据类型分类

  1. 字节流(Byte Stream)

    • 处理字节数据,适用于所有类型的数据,包括二进制数据。
    • 主要类:InputStream(输入字节流)和OutputStream(输出字节流)。
  2. 字符流(Character Stream)

    • 处理字符数据,专门为处理文本数据而设计,自动处理字符编码问题。
    • 主要类:Reader(输入字符流)和Writer(输出字符流)。

详细的流分类及其常用子类

字节流

输入字节流(InputStream)

  • FileInputStream:从文件中读取数据。

    java 复制代码
    FileInputStream fis = new FileInputStream("file.txt");
    int data = fis.read();
    fis.close();
  • ByteArrayInputStream:从字节数组中读取数据。

    java 复制代码
    byte[] buf = { 1, 2, 3 };
    ByteArrayInputStream bais = new ByteArrayInputStream(buf);
    int data = bais.read();
    bais.close();
  • BufferedInputStream:为其他输入流提供缓冲功能,提高读取效率。

    java 复制代码
    FileInputStream fis = new FileInputStream("file.txt");
    BufferedInputStream bis = new BufferedInputStream(fis);
    int data = bis.read();
    bis.close();
    fis.close();
  • DataInputStream:读取Java原始数据类型(如int, float)的输入流。

    java 复制代码
    FileInputStream fis = new FileInputStream("file.dat");
    DataInputStream dis = new DataInputStream(fis);
    int data = dis.readInt();
    dis.close();
    fis.close();

输出字节流(OutputStream)

  • FileOutputStream:向文件中写入数据。

    java 复制代码
    FileOutputStream fos = new FileOutputStream("file.txt");
    fos.write(100);
    fos.close();
  • ByteArrayOutputStream:向字节数组中写入数据。

    java 复制代码
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    baos.write(100);
    byte[] bytes = baos.toByteArray();
    baos.close();
  • BufferedOutputStream:为其他输出流提供缓冲功能,提高写入效率。

    java 复制代码
    FileOutputStream fos = new FileOutputStream("file.txt");
    BufferedOutputStream bos = new BufferedOutputStream(fos);
    bos.write(100);
    bos.close();
    fos.close();
  • DataOutputStream:写入Java原始数据类型(如int, float)的输出流。

    java 复制代码
    FileOutputStream fos = new FileOutputStream("file.dat");
    DataOutputStream dos = new DataOutputStream(fos);
    dos.writeInt(100);
    dos.close();
    fos.close();
字符流

输入字符流(Reader)

  • FileReader:从文件中读取字符数据。

    java 复制代码
    FileReader fr = new FileReader("file.txt");
    int data = fr.read();
    fr.close();
  • CharArrayReader:从字符数组中读取数据。

    java 复制代码
    char[] buf = { 'a', 'b', 'c' };
    CharArrayReader car = new CharArrayReader(buf);
    int data = car.read();
    car.close();
  • BufferedReader:为其他字符输入流提供缓冲功能,提高读取效率。

    java 复制代码
    FileReader fr = new FileReader("file.txt");
    BufferedReader br = new BufferedReader(fr);
    String line = br.readLine();
    br.close();
    fr.close();

输出字符流(Writer)

  • FileWriter:向文件中写入字符数据。

    java 复制代码
    FileWriter fw = new FileWriter("file.txt");
    fw.write("Hello");
    fw.close();
  • CharArrayWriter:向字符数组中写入数据。

    java 复制代码
    CharArrayWriter caw = new CharArrayWriter();
    caw.write("Hello");
    char[] chars = caw.toCharArray();
    caw.close();
  • BufferedWriter:为其他字符输出流提供缓冲功能,提高写入效率。

    java 复制代码
    FileWriter fw = new FileWriter("file.txt");
    BufferedWriter bw = new BufferedWriter(fw);
    bw.write("Hello");
    bw.close();
    fw.close();
  • PrintWriter:提供便捷的方法写入格式化表示的数据。

    java 复制代码
    PrintWriter pw = new PrintWriter("file.txt");
    pw.println("Hello");
    pw.close();

总结

  • 字节流(Byte Stream):用于处理所有类型的数据,特别是二进制数据。

    • 输入流:InputStream及其子类如FileInputStreamByteArrayInputStream等。
    • 输出流:OutputStream及其子类如FileOutputStreamByteArrayOutputStream等。
  • 字符流(Character Stream):用于处理文本数据,自动处理字符编码。

    • 输入流:Reader及其子类如FileReaderBufferedReader等。
    • 输出流:Writer及其子类如FileWriterBufferedWriter等。

根据具体需求选择合适的流类型和子类,可以有效地处理Java中的I/O操作。

相关推荐
钱多多_qdd1 分钟前
spring cache源码解析(四)——从@EnableCaching开始来阅读源码
java·spring boot·spring
waicsdn_haha3 分钟前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk
_WndProc5 分钟前
C++ 日志输出
开发语言·c++·算法
Q_192849990613 分钟前
基于Spring Boot的摄影器材租赁回收系统
java·spring boot·后端
qq_4335545414 分钟前
C++ 面向对象编程:+号运算符重载,左移运算符重载
开发语言·c++
Code_流苏16 分钟前
VSCode搭建Java开发环境 2024保姆级安装教程(Java环境搭建+VSCode安装+运行测试+背景图设置)
java·ide·vscode·搭建·java开发环境
qq_5290252932 分钟前
Torch.gather
python·深度学习·机器学习
数据小爬虫@33 分钟前
如何高效利用Python爬虫按关键字搜索苏宁商品
开发语言·爬虫·python
ZJ_.35 分钟前
WPSJS:让 WPS 办公与 JavaScript 完美联动
开发语言·前端·javascript·vscode·ecmascript·wps
Narutolxy40 分钟前
深入探讨 Go 中的高级表单验证与翻译:Gin 与 Validator 的实践之道20241223
开发语言·golang·gin