从一开始接触,就感觉流(Stream)是一个非常抽象的概念。在C语言中,有三个标准流:StdIn,StdOut,StdErr。那个时候的感觉,用我的L同事的话来说,流就是一个神秘的洞。
我一直在探究流的概念。到底什么是流,流有什么特点,Delphi中的TStream到底和真正的流的概念相差多少?可惜一直没有合理的答案发现。
前一段时间,开始对YAML 有了兴趣。在这里也顺便对YAML 进行简单的介绍。YAML 是一个可供人阅读的数据序列化格式。其类似于XML的作用。但是其存储格式采用语言结构存储。所以其同样是机器可读的格式(方便编程)。
其详细介绍,我想通过另外一篇专门介绍。所以这里之介绍和流相关的内容。更多内容可以访问: http://www.yaml.org/
在Yaml的设计目标中有这样的描述:
这里面要注意的就是stream-based processing。我对此进行了继续的探索,发现流的概念最基本的是在流媒体中出现的。电视、音乐、视频等等都是以流的方式进行处理。而且有专门的处理这些数据流的芯片,叫DSP(Digital Signal Processor)。
在流媒体中,有一个非常重要的特点,那就是数据量极大!由于这点,导致不能缓存所有的数据。所以对流的定义,都围绕着这个特点提出:
-
流数据读取的方向是单一的
-
流数据不能往回读取
-
流数据的缓存非常少
所谓“落花有意,流水无情”,流过的水,是不能回头的。也正是这一点,才成就了“流”这个特殊的概念。我认为当初这个概念的翻译非常到位。或者说中外在这方面都有共同的认识。
综合上面所说,可以总结认为,流的最大概念在于单向处理。
不过上面的概念,仅仅停留在最初的流的概念上。后来的各种语言发展过程中,将很多序列化的线型数据,都当成流来处理。下面是一般情况下Stream定义的方法:
-
Seek
-
Read
-
Write
在各种类型的流中,最基本的就是FileStream。个人以为这个流被现在很多的人理解歪了。首先,FileStream应该出自于Unix中的概念,因为Unix将所有设备都归为File,包括网络、显卡、文件、USB等等。但在Windows中并没有这样默认的概念。
我之所以说很多人将FileStream用错了,是因为,很多文件的存储格式是非Stream-Based的,多为结构化存储,因此在处理这些文件的时候,必然需要Seek来回操作。使用了流的处理类,但却并不是流的理念去操作的。
还有就是MemoryStream的概念,就更夸张了。它基本上是用来作为一个连续的二进制存储区域而已。除非我们可以将流的概念扩展开来,包含二进制数据存储格式。
好了,基本上对流的概念有了比较基础的了解了。不过这里,我想对咱们中国的计算机业倡议一下,我们需要把一些基础的概念做一些明确的概念,就免得好学者这么地去茫然理解了。
分享到:
相关推荐
### 探索Java 8的Stream API:数据流处理的新纪元 #### Java语言概览 Java作为一种广泛应用的编程语言,自1995年由Sun Microsystems(现属于Oracle公司)首次发布以来,就以其强大的功能和灵活性赢得了全球开发者...
对于初学者,了解StreamSets的基本概念和操作流程至关重要,可以通过阅读官方文档、参加在线教程或实践示例项目来快速上手。而高级用户则可以深入探索其高级特性,如自定义处理器和适配器,以满足特定的数据处理需求...
此外,STREAM还引入了窗口的概念,以处理数据流的无限性和时间敏感性,允许用户定义不同类型的窗口(如时间窗口、滑动窗口、翻转窗口等)来捕获特定时间段内的数据。 在压缩包"stream-0.6.0"中,可能包含了该版本的...
理解这些基本概念和创建方法后,你可以开始探索Java Stream的更多高级功能,如中间操作(如filter、map、distinct等)和终端操作(如forEach、collect、count等)。这些操作组合起来,可以构建出强大的数据处理流水...
Stream的名称来源于其数据处理的概念,就像水流一样,数据在管道中流动并经过一系列处理步骤。 Stream的操作主要分为两类:中间操作和终止操作。中间操作包括各种过滤、映射、排序等,它们不会立即执行,而是在遇到...
Java提供了两种主要的IO流类型:字节流(Byte Stream)和字符流(Character Stream)。这两个概念是Java IO体系的基础,也是程序员在处理数据传输时经常遇到的工具。本练习文档将帮助你深入理解并熟练掌握这两种流的...
因此,数据流管理系统(Data Stream Management Systems, DSMS)应运而生,为处理这些连续且无界的数据流提供了一种新的解决方案。 #### 二、数据流管理系统(DSMS) **1. 定义与作用** 数据流管理系统是一种专门...
在JavaScript的世界里,"流冒险"是一段探索和学习如何使用Node.js中的流API的旅程。Substack,一个知名的开源开发者,提供了这个精彩的学习资源,它揭示了流的强大功能,并教你如何有效地利用它们来处理数据。流是...
NTFS流文件的主要概念: 1. 主流(Main Stream):默认的数据流,当我们打开一个文件时,访问的就是主流数据。 2. 隐蔽流(Alternate Data Streams, ADS):除了主流之外的其他数据流,它们不会在文件资源管理器中...
1. 数据流(Stream)概念: 数据流是一种处理数据的方式,它可以将数据视为一连串的比特,允许我们以输入流或输出流的形式进行读写。在Java和Android中,InputStream和OutputStream类是处理数据流的基础,提供了读写...
在这个“安卓Android源码——(游戏保存Stream).zip”文件中,我们可以探索如何在游戏中利用Stream来实现进度保存和加载功能。 Stream是Java I/O体系中的一部分,它提供了一种处理输入和输出数据的抽象方式,允许...
7. 文件共享:如果游戏支持云同步或跨设备共享,还可以使用Google Play服务的`Games.Snapshots` API,它提供了一种安全地在多个设备之间同步游戏进度的方法,其中也涉及到了Stream的概念。 以上是关于Android游戏...
开源项目-tk103331-stream.zip是一个开源项目,其主要焦点在于“流动”这一概念,可能涉及数据流处理、实时计算或者流媒体技术。这个项目的名称tk103331-stream暗示了它可能是由个人或团队tk103331开发的一个专门...
在ANSYS中,命令流(Command Stream)是一种高效的交互方式,用户可以通过编写脚本文件来执行一系列操作,极大地提高了工作效率。本文将深入探讨ANSYS命令流的概念、构成及应用,帮助用户更好地理解和掌握这一核心...
在前端开发领域,测试是确保代码质量和功能正确性的重要环节。`MockStream`是一个专为前端开发者设计的开源库...在探索和使用这个库的过程中,你会更加深入地理解JavaScript中的流以及如何在测试环境中有效地处理它们。
在这个教程中,我们将深入探讨FFmpeg的核心概念以及如何利用它来实现推流功能。 首先,让我们理解什么是推流。推流是指将音视频数据实时发送到服务器的过程,服务器再将这些流分发给多个客户端。在直播场景中,推流...
在本教程中,我们将深入探讨Java编程语言中的两个核心概念:动态代理和Java 8的新特性,特别是关于Stream API的终止操作——匹配。首先,让我们从动态代理开始。 动态代理在Java中是一种强大的工具,它允许我们在...
《I Heart Logs: Event Data, Stream Processing, and Data Integration》是一本由Jay Kreps编写的书籍,该书聚焦于日志(Logs)数据处理的核心概念、技术和实践。作为大数据领域的经典之作,本书深入探讨了事件数据...
输入流(Input Stream)用于读取数据,输出流(Output Stream)用于写入数据。Java提供了多种类型的流,如字节流、字符流、对象流等,满足不同场景的需求。 线程是Java的另一个重要主题。Java提供了多线程支持,...