c# - 从流中读取不知道有多少期望 [c#]

标签 c# arrays stream

当我事先不知道有多少数据将传入时,如何从流中读取数据?现在我只是选择了一个偏高的数字(如下面的代码所示),但不能保证我不会得到更多。

所以我在循环中一次读取一个字节,每次都调整数组的大小?听起来调整大小太多了:-/

TcpClient tcpclnt = new TcpClient();
tcpclnt.Connect(ip, port);

Stream stm = tcpclnt.GetStream();

stm.Write(cmdBuffer, 0, cmdBuffer.Length);

byte[] response = new Byte[2048];
int read = stm.Read(response, 0, 2048);

tcpclnt.Close();

最佳答案

MemoryStream 是你的 friend

http://msdn.microsoft.com/en-us/library/system.io.memorystream

构造没有默认大小,它将自动调整大小。然后按照你的建议循环,每次读取合理数量的数据。我通常至少选择 MTU 作为默认缓冲区大小。

要获取它创建调用的底层 byte[] 数组

memoryStreamInstance.GetBuffer() 

关于c# - 从流中读取不知道有多少期望 [c#],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/834605/

相关文章:

node.js - 在 Node.js 中模拟服务器 - 流分隔文件,暂停 1 秒

c# - 如何制作依赖于 System.Drawing 命名空间的现有 C# 代码的 Silverlight 版本

c# - 服务器端代码中的 HTML 输入值。网站

c# - 将实例设置为 null 而不是引用它的变量

javascript if else逻辑不起作用

python - 如何在numpy中以3x3矩阵的形式获取特定数字的周围数字?

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

javascript - Webrtc 远程视频流不工作

networking - 如何知道何时完成接收 TCP 流?

c# - 如何检测鼠标滚轮方向(向前或向后)