【发布时间】:2019-02-13 09:14:25
【问题描述】:
我有一个字节数组,我想返回一定大小的顺序块(以新字节数组的形式)。
我试过了:
originalArray = BYTE_ARRAY
var segment = new ArraySegment<byte>(originalArray,0,640);
byte[] newArray = new byte[640];
for (int i = segment.Offset; i <= segment.Count; i++)
{
newArray[i] = segment.Array[i];
}
显然,这只会从原始数组创建一个前 640 个字节的数组。最终,我想要一个循环遍历前 640 个字节并返回这些字节的数组,然后遍历下一个 640 个字节并返回一个 THOSE 字节数组。这样做的目的是向服务器发送消息,每条消息必须包含 640 个字节。我不能保证原始数组长度可以被 640 整除。
谢谢
【问题讨论】:
-
首先,请注意:
ArraySegment仍在使用与原始数组相同的缓冲区。这通常正是您可能想要的,但这不是您在其余问题中所描述的。 -
是的,要正确回答这个问题,我们需要知道 (a) 您是否需要制作原始数据的实际副本,还是分块引用原始数据就足够了? (b) 你可以用 IEnumerable
来处理块,还是必须是一个数组? (c) 您使用的是什么版本的 C# 和 .Net?这些问题的答案将决定最高效的解决方案。 -
a) 需要是一个副本 b) 它需要是一个字节数组 c) 它和 asp.net core mcc 应用程序
-
如果缓冲区不是 640 的倍数,那么剩余字节会怎样?它们只是被忽略了,还是用零填充到 640 个字节并发送,或者其他什么?
-
我假设它只是被忽略了。我正在尝试根据此文档“developer.nexmo.com/voice/voice-api/guides/websockets”将音频写入 websocket,这需要 640 字节的消息大小
标签: c# arrays loops split byte