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
处理数据序列,支持函数式编程。- 它们名字相似但功能和用途完全不同,各自适用于不同的场景。