在C#中,如何使用指向FileStream的byte *指针编写数组而不使用Marshal复制它?

我正在使用制造商生产的相机SDK,他们给了我一个名为
Image的类,其中一个名为data *的数据指针指向图像数据的开头.他们还给了我一个名为dataSize的uint,它对应于数据的长度.

现在,我想使用FileStream将其写入文件,但不幸的是,FileStream中唯一的写入函数是签名Write(Byte [],Int32,Int32).当然,如果我尝试使用数据作为Write(…)的参数,它告诉我我不能从byte *转换为byte [].

因为在我的应用程序中,性能至关重要,我想避免使用Marshal.Copy(…)将数据复制到byte []数组中,如此answer中所建议的那样.

我可以使用哪些其他选项来获取此字节*指针并将其写入文件?请注意,我的总体目标是拍摄这些每秒数千张的图像,并尽可能快地将它们写入磁盘(即依次为SSD).

最佳答案 看一下
UnmanagedMemoryStream类型:

Image cameraData = YourSDKFunction();
using (var camera = new UnmanagedMemoryStream(cameraData.data, (int64)cameraData.dataSize))
using (var outFile = new FileStream("outputFile.jpg"))
{
     camera.CopyTo(outFile);
}
点赞