阅读量:0
java.io.InputStream
和 java.io.OutputStream
是 Java I/O 系统中的两个重要抽象类,它们分别代表字节输入流和字节输出流。而 java.util.stream.Stream
是 Java 8 引入的用于支持函数式编程的一个类,用于处理数据序列。虽然它们名字相似,但功能和用途完全不同。
InputStream 和 OutputStream
InputStream
:是字节输入流的抽象类,定义了从各种输入源(如文件、网络、内存等)读取字节的基本方法。OutputStream
:是字节输出流的抽象类,定义了向各种输出目标(如文件、网络、内存等)写入字节的基本方法。
继承关系图:
java.lang.Object └─ java.io.InputStream ├─ java.io.ByteArrayInputStream ├─ java.io.FileInputStream ├─ java.io.FilterInputStream │ ├─ java.io.BufferedInputStream │ ├─ java.io.DataInputStream │ ├─ java.io.PushbackInputStream └─ java.net.SocketInputStream java.lang.Object └─ java.io.OutputStream ├─ java.io.ByteArrayOutputStream ├─ java.io.FileOutputStream ├─ java.io.FilterOutputStream │ ├─ java.io.BufferedOutputStream │ ├─ java.io.DataOutputStream │ ├─ java.io.PrintStream └─ java.net.SocketOutputStream
Stream
Stream
:java.util.stream.Stream
是 Java 8 中引入的一个接口,用于处理数据序列,支持函数式编程。它提供了许多方便的操作,如过滤、映射、归约等。Stream
可以由各种数据源生成,如集合、数组、文件等。
继承关系图:
java.lang.Object └─ java.util.stream.BaseStream<T, S extends BaseStream<T, S>> └─ java.util.stream.Stream<T> ├─ java.util.stream.DoubleStream ├─ java.util.stream.IntStream └─ java.util.stream.LongStream
区别与关系
- 目的不同:
InputStream
和OutputStream
是为了处理字节流的输入和输出,而Stream
是为了处理元素序列,支持函数式编程操作。 - 使用场景不同:
InputStream
和OutputStream
用于低级别的 I/O 操作(如文件读写、网络通信等),而Stream
用于对数据进行高级操作(如过滤、映射、归约等)。 - API 不同:
InputStream
和OutputStream
提供基本的字节读写方法(如read
、write
等),而Stream
提供丰富的函数式操作方法(如filter
、map
、reduce
等)。
示例代码
InputStream/OutputStream 示例
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class InputStreamOutputStreamExample { public static void main(String[] args) { try (FileInputStream fis = new FileInputStream("input.txt"); FileOutputStream fos = new FileOutputStream("output.txt")) { int byteData; while ((byteData = fis.read()) != -1) { fos.write(byteData); } } catch (IOException e) { e.printStackTrace(); } } }
Stream 示例
import java.util.Arrays; import java.util.List; public class StreamExample { public static void main(String[] args) { List<String> words = Arrays.asList("hello", "world", "java", "stream"); long count = words.stream() .filter(word -> word.length() > 4) .count(); System.out.println("Number of words with length greater than 4: " + count); } }
总结
InputStream
和OutputStream
处理字节流的输入输出。Stream
处理数据序列,支持函数式编程。- 它们名字相似但功能和用途完全不同,各自适用于不同的场景。