在.NET中将整数数组写入流

6
什么是将int数组(Int32 [])的二进制表示写入流(Stream)的最佳方法?
Stream.Write仅接受byte []作为源,我希望避免将数组转换/复制为byte [](数组),而是直接从“原始位置”进行流式传输。
在更系统导向的语言(即C ++)中,我只需将int数组强制转换为byte *,但据我所知,在C#中不可能这样做(而且,将byte *强制转换为byte []也行不通)
谢谢
马丁
PS:实际上,我还想流式传输单个int值。使用BinaryConverter.GetBytes()会创建一个新的字节数组吗?在这种情况下,我将我的问题扩展到如何有效地流式传输单个int值...
2个回答

13

最简单的选择是使用BinaryWriter将输出流包装起来,然后为每个int值调用Write(int)。如果这种方式不能使用正确的字节顺序,您可以使用我的MiscUtil库中的EndianBinaryWriter

我不知道是否有内置功能能够更有效地完成这项任务... 我希望流内部的缓冲区对大部分情况都能进行处理。


1
在一次非常不科学的测试中,缓冲区似乎能够有效地处理循环遍历数组并对每个值调用Write(int)。谢谢。 - Matt
请注意:像BinaryWriter这样的流包装器在完成操作后往往会关闭流... 如果您想将带有其写入内容的流传递给其他处理程序来处理诸如写入等操作,则不太方便。 - Nyerguds
@Nyerguds:BinaryWriter 提供了保持流打开的选项,正是出于这个原因。由于问题没有表明有必要这样做,我没有在答案中包含详细信息。 - Jon Skeet
我知道,我只是觉得值得至少作为注释添加,因为我今天再次遇到了这个问题...在一个旧的3.5项目上,那个选项也不可用。啊,好吧,就用dispose-blocking包装类吧。 - Nyerguds

3

谢谢,但由于我需要精确控制要写入哪些字节,我将使用 BinaryWriter - MartinStettner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接