我在流中有一些实际上是uint格式的数据。 System.IO.Stream只允许我将内容读出到字节数组,但我不想读取字节,然后将它们转换为字节数组长度的1/4的uint数组。我想直接将它读入uint数组的内存中,以便节省时间。
如果它处于非托管C ++中,那就太容易了。只需将指针发送到uint数组即可完成。但在C#中它看起来并不那么简单。我正在尝试使用与另一个uint数组相同的内存地址生成一个字节数组,然后将字节数组作为Stream.Read()的参数发送,这样当Stream.Read()写入字节数组时,内容就是在uint数组中也是如此。但是我看过Marshall课程,到目前为止还找不到解决这个问题的方法。有什么想法吗?
答案 0 :(得分:3)
List<UInt32> array = new List<UInt32>();
System.IO.BinaryReader reader = new System.IO.BinaryReader(stream);
while(stream.Position < stream.Length)
array.Add(reader.ReadUInt32());
请注意,某些流实现不支持位置和/或长度属性。
答案 1 :(得分:2)
我认为(是的,这是另一个懒惰的建议类型的帖子,没有人们发布的代码,试图在他们的备用5分钟内获得代表)你可以在C#中使用相同的技术unsafe
关键字 - 这可以让你弄乱指针并按原样访问内存。
根据您的数据当然,我建议只是以更低效的方式执行它 - 不安全的代码并不是那么漂亮 - 您需要额外的安全性和安全性。时间来测试。