流的分类

流的分类


在Java中,流(Stream)被用于表示数据的输入和输出。Java的流分为几个不同的类别,每种类别都有其特定的用途和特点。以下是Java流的主要分类:

1. 字节流(Byte Streams)

  • 处理原始字节数据。
  • 代表类:InputStreamOutputStream

2. 字符流(Character Streams)

  • 处理字符数据,自动处理字符编码的转换。
  • 代表类:ReaderWriter

3. 输入流(Input Streams)

  • 用于从数据源读取数据。
  • 字节输入流:FileInputStream, ByteArrayInputStream, StringBufferInputStream
  • 字符输入流:FileReader, CharArrayReader, StringReader

4. 输出流(Output Streams)

  • 用于向数据目标写入数据。
  • 字节输出流:FileOutputStream, ByteArrayOutputStream, PrintStream
  • 字符输出流:FileWriter, CharArrayWriter, StringWriter

5. 节点流(Low-Level Streams)

  • 直接连接到数据源或数据目的地的基本流。
  • 例如:FileInputStream, FileOutputStream, FileReader, FileWriter

6. 处理流(High-Level Streams)

  • 在节点流的基础上提供额外的功能,如缓冲、过滤、数据转换等。
  • 字节处理流:BufferedInputStream, BufferedOutputStream, DataInputStream, FilterInputStream
  • 字符处理流:BufferedReader, BufferedWriter, LineNumberReader, FilterReader

7. 管道流(Pipe Streams)

  • 用于线程之间的通信。
  • 代表类:PipedInputStreamPipedOutputStream

8. 数据流(Data Streams)

  • 用于读写原始数据类型,自动转换为字节。
  • 代表类:DataInputStream(从字节流中读取基本数据类型)和 DataOutputStream(向字节流中写入基本数据类型)。

9. 对象流(Object Streams)

  • 用于对象的序列化和反序列化。
  • 代表类:ObjectInputStreamObjectOutputStream

10. 文件通道(File Channels)

  • Java NIO 中的文件通道,提供对文件的高效访问。
  • 代表类:FileChannel

11. 内存映射文件(Memory-Mapped Files)

  • 一种内存访问方式,允许将文件区域映射到内存中。
  • 通过 FileChannel 实现。

12. 散射/聚集通道(Scattering/Gathering Channels)

  • 散射通道允许从多个缓冲区读取数据并写入单一的目标通道。
  • 聚集通道允许从单一的源通道读取数据并写入多个目标缓冲区。

示例用法

以下是使用字节输入流和字节输出流的示例:

复制代码
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class StreamCopyExample {
    public static void main(String[] args) {
        String fromFile = "source.txt";
        String toFile = "destination.txt";

        try (FileInputStream in = new FileInputStream(fromFile);
             FileOutputStream out = new FileOutputStream(toFile)) {
            int byteRead;
            while ((byteRead = in.read()) != -1) {
                out.write(byteRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

示例中,我们从一个文件读取数据并写入到另一个文件,展示了字节流的基本用法。

posted @   墨澜  阅读(50)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示