当我事先不知道会有多少数据输入时,如何从流中读取?现在,我只是选择了一个较高的数字(如下面的代码所示),但不能保证我不会得到更多。
所以我一次循环读取一个字节,每次都调整数组大小?听起来好像调整大小太多了:-/
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();
最佳答案
假设您没有得到巨大的存储量(超出内存容量),将所有内容放在一起:
TcpClient tcpclnt = new TcpClient();
tcpclnt.Connect(ip, port);
Stream stm = tcpclnt.GetStream();
stm.Write(cmdBuffer, 0, cmdBuffer.Length);
MemoryStream ms = new MemoryStream();
byte[] buffer = new Byte[2048];
int length;
while ((length = stm.Read(buffer, 0, buffer.Length)) > 0)
ms.Write(buffer, 0, length);
tcpclnt.Close();
byte[] response = ms.ToArray();
如前所述,
MemoryStream
将为您处理动态字节数组分配。并且Stream.Read(byte[], int, int)
将返回在此“读取”或0
中找到的字节的长度(如果到达末尾)。