关于流(stream)的概念理解

author author     2022-09-12     473

关键词:

什么是流,我认为流就是对IO设备的一种抽象。流将各种千差万别的设备统一抽象成一种模型,向用户提供一个统一的编程接口,用户无需了解设备内部细节,就可完成对设备的IO操作,大大简化开发难度。

流这个概念很重要,很大一部分初涉猎编程的人(包括我),犯眼高手低的错误,认为流不就是对控制台,文件的读写操作吗?其实不然,流也是一个非常重要的编程思想,就像面向对象一样,要深刻理解贯彻在脑子里。要具备对 流 足够的理论知识,才能游刃有余的面对各种数据IO问题。

废话少说。

 

c#语言里,所有的流类型 的基类是 Stream。

Stream是以一个抽象类,由它派生的常用类有:

 

MemoryStream:对内存进行读取与写入 

BufferedStream:对缓冲器进行读取/写入 

FileStream:对文件执行读取与写入

 

流作为对IO设备的一种抽象,不仅是对设备数据的一种缓冲容器,自然也应该具备对设备的读写操作,基本方法有:

Read/Write :读写buffer

ReadByte/WriteByte:读写字节

Seek:设置读写位置

由于流的读写操作有功能上的局限性,所以对流有 Reader/Writer,来丰富对流的读写操作。

c#有TextReader/Writer,BinaryReader/Writer,顾名思义分别为字符流读写和字节流读写。

其中TextReader/Writer是一个抽象类,由它派生的有StreamReader/Writer,StringReader/Writer,后者不对流进行读写操作,所以一般常用前者来读写字符流。

BinaryReader/Writer可以直接拿来用。

 

其他:

我觉得 流 更像是用户与设备之间的“数据通道”,是一种数据的中间容器,不一定缓存设备中的所有数据,但可以允许用户访问设备的所有数据。

其实所有的问题来自于:为什么WebResponse的最终返回给用户的是一个stream,而不是string?

一个解释是response流不一定是字符流,也可以是字节流(这一点确实之前太先入为主了,总是认为服务端返回的是一组字符串)

其二是当response流数据量较大时,考虑到性能问题,不可能一下子将所有数据拿回到用户端上,用流来做中间缓冲。

理解node.js中stream(流)(代码片段)

Stream(流)是Node.js中处理流式数据的抽象接口。stream模块用于构建实现了流接口的对象。Node.js提供了多种流对象。例如,对HTTP服务器的request请求和process.stdout(标准输出),都是流的实例。流可以是可读的、可写的、或者可读可写... 查看详情

java8函数式编程入门官方文档中文版java.util.stream中文版流处理的相关概念

前言本文为java.util.stream包文档的译文极其个别部分可能为了更好理解,陈述略有改动,与原文几乎一致原文可参考在线API文档https://docs.oracle.com/javase/8/docs/api/Packagejava.util.streamDescription一些用于支持流上函数式操作的类,例如在集... 查看详情

高效告别996,开启java高效编程之门3-5stream流概念解析

...的没有意义,直接过了1    重点概念解析中的定义Stream流的组成Stream流和集合的区别 2    概念解析定义:从支持数据处理操作的源生成的元素序列。 解释:元素序列:和集合一样,流也是一个接口,可以访问... 查看详情

node-流浅析(代码片段)

概念流(stream)是Node.js中处理流式数据的抽象接口。stream模块用于构建实现了流接口的对象。Node.js提供了多种流对象。例如,HTTP服务器的请求和process.stdout都是流的实例。流可以是可读的、可写的、或者可读可写的。所有的流... 查看详情

stream简介

...介绍:中间操作和终端操作的使用: 流的个人理解:Stream也就是流,他和IO流不一样,他是java8诞生的东西,我对他的理解就是一个更为高级的容器,他可以轻易的对立面存储的数据进行各种各样的操作,比如过滤,转换,... 查看详情

理解java之io流

...数据处理单位分字节流:以字节为单位传输数据的流,以Stream结尾的都是字节流。字符流:以字符为单位传输数据的流,以Reader结尾的都是输入字符流,以Writer结尾的都是输出字符流。按功能( 查看详情

[三]java8函数式编程stream概念深入理解stream运行原理stream设计思路

Stream的概念定义 官方文档是永远的圣经~  表格内容来自https://docs.oracle.com/javase/8/docs/api/  Packagejava.util.stream 一节部分原文内容的翻译 intsum=widgets.stream().filter(b->b.getColor()==RED 查看详情

java函数式编程之stream流编程

Stream流编程-概念概念:这个Stream并非是I/O流里的Stream,也不是集合元素,更不是数据结构,它是JDK1.8带来的新特性,是一种用函数式编程在集合类上进行复杂操作的工具。Stream就像工厂里的流水线一样,有输入和输出。Stream不... 查看详情

stream流

Stream流说到Stream便容易想到I/OStream,而实际上,谁规定“流”就一定是“IO流”呢?在Java8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊端。传统集合的多步遍历代码几乎所... 查看详情

stream流操作

 Stream 类先看下面的图 Stream是所有流的抽象基类(不能被实例化,需要使用他的派生类FileStream/MemoryStream/BufferedStream)。流是字节序列的抽象概念,例如文件、输入/输出设备、内部进程通信管道或者TCP/IP套接字。Stream... 查看详情

java8stream(流)(代码片段)

目录引言一、Stream背景概述1、背景2、概念3、特性 4、Stream流的思想5、 Stream流的好处 二、生成流1、Collection体系集合生成2、Map体系集合生成3、数组生成 三、Stream流中间操作方法1、概念:2、常见方法:3、方法展示加... 查看详情

关于对html中文档流的理解

理解好文档流,有助于我们对css中定位和浮动的理解。什么是文档流呢,经过我看过的一些文章,加入自己的理解。我得出文档流的定义如下: 1、从左至右,从上至上的布局。 2、符合html中标签本身含义的布局,比如某... 查看详情

jdk1.8新特性——stream(流)的创建(代码片段)

目录一、Stream(流)的理解二、Stream(流)是什么三、Stream(流)的注意事项四、StreamAPI的操作步骤1、创建Stream2、中间操作Stream3、终止Stream4、StreamAPI的操作步骤图解五、Stream(流)创建的四种方... 查看详情

foundationsofstreamingsql(代码片段)

...性来理解流与表的相对性:streams->tables:一个关于变更的数据流随着时间聚集产生了一个数据表;tables->streams:对一个表的变更的观察,伴随着时间的变化产生了一个数据流(observation这一过程,... 查看详情

jdk1.8新特性——stream(流)的中间操作基本语法

目录一、Stream(流)的理解二、Stream(流)是什么三、Stream(流)的注意事项四、StreamAPI的操作步骤1、创建Stream2、中间操作Stream3、终止Stream4、StreamAPI的操作步骤图解五、Stream(流)的中间操作语... 查看详情

jdk1.8新特性——stream(流)的终止操作基本语法

目录一、Stream(流)的理解二、Stream(流)是什么三、Stream(流)的注意事项四、StreamAPI的操作步骤1、创建Stream2、中间操作Stream3、终止Stream4、StreamAPI的操作步骤图解五、Stream(流)的终止操作语... 查看详情

java8新特性--stream流操作

一.Stream的介绍?Stream流操作是Java8新增的重要特性,与之前学习的java.io包里的字节流和字符流是完全不同的概念,不是同一个东西。?这里的Stream流操作是java8针对集合操作的增强,专注于对集合的各自高效、便利、优雅的聚合操... 查看详情

java中的stream流(代码片段)

java中的Stream流说到Stream便容易想到I/OStream,而实际上,谁规定“流”就一定是“IO流”呢?在Java8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊端。一、引言传统集合的多步... 查看详情