有这个类,它允许在一个线程中将数据写入流并在多个线程中读取。
它支持流媒体的主要目的,例如。网络或音频流,读取它并在多个线程中处理,允许数据随流传输。
MemoryStreamMultiplexer 逐块写入数据并存储到List<byte[]> _Buffer
变量中。
然后将此 _Buffer 传递给 MemoryStreamReader,如下所示:
new MemoryStreamReader(_Buffer, dataReady, finished);
MemoryStreamReader 读取存储在此 _Buffer 列表中的 byte[] 数组,检查数据是否存在
if (_bufferIndex < _bufferList.Count)
{
return ReadInternal(buffer, offset, count);
}
ReadInternal 从 _Buffer 列表中获取下一个缓冲区,然后读取它
byte[] currentBuffer = _bufferList[_bufferIndex];
现在,问题来了:currentBuffer 随机变为 null,这会导致稍后出现 NullReferenceException。
在调试中,虽然 currentBuffer 被声明为空,但如果我检查 _bufferList[_bufferIndex] 中的值 - 返回有效数组。所以这似乎是一些内存或并发问题。
我的想法是,在某些时候 List 决定改变它的容量,重新分配内部数组。当我们仍在读取 List 时,它返回 null,因为内存地址已更改但尚未将数据复制到其中。
问题是 - 如何解决这个问题?