流和队列有什么区别?它们都具有元素的有序集合的概念,但是倾向于具有不同的实现和“插入” /“提取”(流)与“入队” /“出队”(队列)的词汇表。这些可以互换吗?他们提出不同的概念或模式吗?如果是这样,有什么区别?
流和队列有什么区别?它们都具有元素的有序集合的概念,但是倾向于具有不同的实现和“插入” /“提取”(流)与“入队” /“出队”(队列)的词汇表。这些可以互换吗?他们提出不同的概念或模式吗?如果是这样,有什么区别?
Answers:
甲流是不是一个真正的数据结构,这样(在概念上),但是数字编码相干信号用于发送或接收信息”(数据或数据包的数据包)的序列。因此,基本上数据的序列。
一个队列是一个简单的FIFO机制,允许您将项目添加到队列的后面或前面走。
流始终具有源,例如文件,网络位置等。队列本身并不包含任何数据。
因此,本质上它们在概念上是完全不同的,并且正如梅森指出的那样,它们的用法也有所不同。
yes(1)
嵌入式默认字符串。带参数运行,无论提供参数如何。
基本区别在于它们的使用方式。在流中,通常只使用操作的一侧:打开流以读取或写入,但不能同时读取和写入。而在排队的情况下,您需要将物品放进去然后取出。
另外,队列对您放东西的顺序非常严格,而流通常(但不总是)支持Seek
操作,尤其是从它们中读取时。
FileStream
可以在ReadWrite
模式下打开。
如果我们更直观地思考这些单词的常用用法,我们可以避免特定语言和实现方式对特定用法的混乱,因此这些术语实际上可以表示以下含义:
这是这些术语的意图。他们是隐喻。(就像其他所有内容一样)(嘘!您会毁了这个故事!)
队列是比流更高层次的概念。队列的基本元素是消息/对象,它是一个连贯的(通常是类型化的)数据结构,可由消费者自行解释。另一方面,在流的基础上,存在(通常是固定大小的)位/字节/字符,它们本身对应用程序通常毫无意义。这些字符序列可以组成一个“消息”,但是流API将其留给应用程序以将字符序列拆分为有意义的块。
如果流缓冲区已满,而另一端未进行读/写,则Stream API通常还允许部分读写。处理队列的应用程序通常希望队列在内部进行处理。
队列可以在流的顶部实现,这是通过实现消息框架来实现的。例如,TCP提供了一个流接口,HTTP建立在TCP之上,并使用Content-Length / chunked传输编码添加了消息帧。HTTP连接API的用户从处理HTTP连接流拆分为HTTP请求的过程中抽象出来。
另一方面,通常,在队列顶部实现流API的意义较小,因为对消息帧的处理会增加不必要的开销。
在函数式编程语言(例如Scala)以及其他语言中,流实际上更像是函数列表,它们是队列。但是,我应该注意,实际上可以使用一对list来实现队列。在Scala以及其他地方,Stream只是一个惰性列表-更具体地说,列表的尾部是一个lazy val
。
功能流可以与队列(而不是列表)共享某些相似之处,因为您可以以不保留对流头的引用的方式使用它们-但您必须小心:https:// stackoverflow.com/a/5159356/3096687。这有点类似于队列的出队调用(尽管在流的情况下,您还是隐式地这样做:http : //daily-scala.blogspot.com/2010/01/streams-2-stream-construction.html)。