【问题标题】:Unexpected MemoryStream behavior意外的 MemoryStream 行为
【发布时间】:2014-12-15 10:44:13
【问题描述】:

我正在读取和写入同一个 MemoryStream。

类似这样的东西(可能的编译错误):

MemoryStream stream = new MemoryStream();
stream.Write("1234",0,4);
stream.Position -= 4;
stream.Read(buffer,0,4);

为什么我必须移动位置?为什么读写不分开?

还有其他可以使用的Stream吗?

【问题讨论】:

  • 您必须移动位置,因为这是流的工作方式,当您读取或写入位置时,位置会移动,因此如果您想读取或写入相同的部分两次,您必须将位置移回开始。为什么会出现这个问题?
  • 请注意,这段代码甚至不会编译,因为Stream.Write 没有重载,它需要一个字符串...
  • 实际上,所有流的位置在您每次读取或写入时都会移动。我怀疑这也适用于所有语言,因为这是流定义的一部分:具有当前位置的数据序列,您可以通过读/写向前移动
  • @Ben Robinson 我将它用作队列。理想的选择是 Queue,但是我需要把数据一个一个放。

标签: c#


【解决方案1】:

因为这就是流应该如何工作的。您有 一个 位置,将其视为光标,设置在流中您可以读取或写入的点。阅读和写作都推动了这一立场。

如果您只是使用MemoryStream 在调用者之间交换数据,作为一种伪 IPC 机制,那么也许有更好的方法来做到这一点。

【讨论】:

  • 什么是伪IPC机制?
  • 我说如果。你能解释一下为什么要使用这样的流吗?
  • 这是用 C#2 编写的非常古老的代码,我正在尝试逐步准确地重写。最初,它用作缓冲区来存储来自服务器的传入数据,直到 GUI 有时间处理它。数据是二进制的。
猜你喜欢
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
  • 2020-10-04
  • 2016-07-16
  • 2016-05-10
  • 2020-07-23
  • 2021-08-23
  • 2021-11-16
相关资源
最近更新 更多