SequenceInputStream 是 Java 中按顺序合并多个输入流的工具类,内部维护枚举并自动切换流,读完一个再读下一个,不缓冲、不并发,需手动关闭各子流,支持两种构造方式且不支持 mark/reset。
SequenceInputStream 是 Java IO 中专门用于按顺序合并多个输入流的工具类,它把多个 InputStream 串成一个逻辑上的单一输入流,读取时自动从第一个流读完再切换到下一个,无需手动管理切换逻辑。
它内部维护一个 Enumeration(或两个流的构造方式),每次调用 read() 时:
注意:它不缓冲、不预读、不并发,纯线性顺序消费,适合拼接日志片段、分段资源等场景。
① SequenceInputStream(Enumeration
适用于动态数量的流,需提前封装为 Vector 或其他支持 elements() 的集合:
② SequenceInputStream(InputStream s1, InputStream s2)
适合固定两个流的简单合并,底层会将它们包装成双元素枚举,更轻量。
Java 8+ 更推荐用 Stream + 自定义迭代器,或借助第三方库(如 Apache Commons IO 的 CompositeInputStream);若需并行合并或格式转换,应考虑 NIO 的 Channels.newInputStream() 配合 ByteBuffer 手动组装。
基本上就这些。SequenceInputStream 机制简单直接
,关键在理解它的“顺序”和“不可逆”特性,用对了很省心,用错了容易漏关流或误判 EOF。