从一开始接触,就感受流(Stream)是一个很是抽象的概念。在C语言中,有三个标准流:StdIn,StdOut,StdErr。那个时候的感受,用个人L同事的话来讲,流就是一个神秘的洞。git
我一直在探究流的概念。到底什么是流,流有什么特色,Delphi中的TStream到底和真正的流的概念相差多少?惋惜一直没有合理的答案发现。编程
前一段时间,开始对YAML 有了兴趣。在这里也顺便对YAML 进行简单的介绍。YAML 是一个可供人阅读的数据序列化格式。其相似于XML的做用。可是其存储格式采用语言结构存储。因此其一样是机器可读的格式(方便编程)。缓存
其详细介绍,我想经过另一篇专门介绍。因此这里之介绍和流相关的内容。更多内容能够访问: http://www.yaml.org/网络
在Yaml的设计目标中有这样的描述:ide
这里面要注意的就是stream-based processing。我对此进行了继续的探索,发现流的概念最基本的是在流媒体中出现的。电视、音乐、视频等等都是以流的方式进行处理。并且有专门的处理这些数据流的芯片,叫DSP(Digital Signal Processor)。翻译
在流媒体中,有一个很是重要的特色,那就是数据量极大!因为这点,致使不能缓存全部的数据。因此对流的定义,都围绕着这个特色提出:设计
所谓“落花有意,流水无情”,流过的水,是不能回头的。也正是这一点,才成就了“流”这个特殊的概念。我认为当初这个概念的翻译很是到位。或者说中外在这方面都有共同的认识。视频
综合上面所说,能够总结认为,流的最大概念在于单向处理。get
不过上面的概念,仅仅停留在最初的流的概念上。后来的各类语言发展过程当中,将不少序列化的线型数据,都当成流来处理。下面是通常状况下Stream定义的方法:it
在各类类型的流中,最基本的就是FileStream。我的觉得这个流被如今不少的人理解歪了。首先,FileStream应该出自于Unix中的概念,由于Unix将全部设备都归为File,包括网络、显卡、文件、USB等等。但在Windows中并无这样默认的概念。
我之因此说不少人将FileStream用错了,是由于,不少文件的存储格式是非Stream-Based的,多为结构化存储,所以在处理这些文件的时候,必然须要Seek来回操做。使用了流的处理类,但却并非流的理念去操做的。
还有就是MemoryStream的概念,就更夸张了。它基本上是用来做为一个连续的二进制存储区域而已。除非咱们能够将流的概念扩展开来,包含二进制数据存储格式。
好了,基本上对流的概念有了比较基础的了解了。不过这里,我想对我们中国的计算机业倡议一下,咱们须要把一些基础的概念作一些明确的概念,就省得好学者这么地去茫然理解了。