java Stream类和InputStream/OutputStream类的比较
创始人
2025-01-07 20:03:20
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

  • Streamjava.util.stream.Stream 是 Java 8 中引入的一个接口,用于处理数据序列,支持函数式编程。它提供了许多方便的操作,如过滤、映射、归约等。Stream 可以由各种数据源生成,如集合、数组、文件等。

继承关系图:

java.lang.Object   └─ java.util.stream.BaseStream>        └─ java.util.stream.Stream             ├─ java.util.stream.DoubleStream             ├─ java.util.stream.IntStream             └─ java.util.stream.LongStream 

区别与关系

  • 目的不同InputStream 和 OutputStream 是为了处理字节流的输入和输出,而 Stream 是为了处理元素序列,支持函数式编程操作。
  • 使用场景不同InputStream 和 OutputStream 用于低级别的 I/O 操作(如文件读写、网络通信等),而 Stream 用于对数据进行高级操作(如过滤、映射、归约等)。
  • API 不同InputStream 和 OutputStream 提供基本的字节读写方法(如 readwrite 等),而 Stream 提供丰富的函数式操作方法(如 filtermapreduce 等)。

示例代码

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

相关内容

热门资讯

第九分钟辅助!天天爱柳州辅助器... 天天爱柳州辅助器是一款可以让一直输的玩家,快速成为一个“必胜”的ai辅助神器,有需要的用户可以加我微...
热门推荐!微信小程序蜀山辅助器... 热门推荐!微信小程序蜀山辅助器免费下载(辅助)外挂辅助开挂插件(有挂秘诀)-哔哩哔哩;最新版2026...
第4分钟普及!奇迹陕西辅助器(... 第4分钟普及!奇迹陕西辅助器(透视)原来真的是有挂脚本(推荐开挂软件);奇迹陕西辅助器免费下载原版,...
第八分钟讲解!越乡游金花辅助,... 第八分钟讲解!越乡游金花辅助,九酷众游辅助,细节方法(有挂实锤)-哔哩哔哩1、下载安装好越乡游金花辅...
透视软件!浙江宝宝游戏辅助工具... 透视软件!浙江宝宝游戏辅助工具(辅助)外挂开挂辅助插件(了解有挂)-哔哩哔哩;是一款可以让一直输的玩...
第5分钟发现!桃乐甘肃麻将下载... 《第5分钟发现!桃乐甘肃麻将下载辅助器(辅助)原来有挂软件(必看开挂工具)》 桃乐甘肃麻将下载辅助器...
第8分钟了解!河洛刚次辅助,温... 第8分钟了解!河洛刚次辅助,温州茶苑辅助软件,详细教程(有挂攻略)-哔哩哔哩;无需打开直接搜索加薇1...
热点讨论!新二号辅助软件下载(... 热点讨论!新二号辅助软件下载(辅助)外挂辅助开挂软件(有挂教程)-哔哩哔哩;是一款可以让一直输的玩家...
8分钟解说!网易亲友圈辅助(开... 8分钟解说!网易亲友圈辅助(开挂)原来有挂平台(必看开挂安装);小薇(透视辅助)致您一封信;亲爱网易...
第5分钟开挂!如何在哈灵上辅助... 第5分钟开挂!如何在哈灵上辅助,决战卡五星辅助看牌器,解说技巧(有挂方略)-哔哩哔哩 了解更多开挂安...