在 C# .net 4 中读取/写入字节数组
问候溢出者,
我喜欢内存映射文件的灵活性,因为您可以读取/写入任何值类型。
有没有办法对字节数组执行相同的操作,而不必将它们复制到例如内存映射缓冲区中?
问候
Greetings Overflowers,
I love the flexibility of memory mapped files in that you can read/write any value type.
Is there a way to do the same with byte arrays without having to copy them into for e.g. a memory map buffers ?
Regards
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以使用
BitConverter
类在基本数据类型和字节数组之间进行转换。您可以直接从数组中读取值:
要写入数据,请将其转换为字节数组,然后将其复制到数据中:
You can use the
BitConverter
class to convert between base data types and byte arrays.You can read values directly from the array:
To write data you convert it to a byte array, and copy it into the data:
您可以绑定
MemoryStream
到给定的字节数组,将其属性Position
设置为转到数组中的特定位置,然后使用BinaryReader
或BinaryWriter
读取/写入不同的值类型从/到 它。You can bind a
MemoryStream
to a given byte array, set it's propertyPosition
to go to a specific position within the array, and then use aBinaryReader
orBinaryWriter
to read / write values of different types from/to it.您正在搜索
MemoryStream
可以从固定大小的字节数组初始化(无需复制!)的类。You are searching the
MemoryStream
class which can be initialised (without copying!) from a fixed-size byte array.(使用不安全的代码)
下面的示例展示了如何用两个 long 值填充 16 字节数组,如果没有额外的复制操作,BitConverter 仍然无法做到这一点:
或者您可以创建自己的 StoreBytes() 方法:
从字节数组中读取值是不行的BitConverter 存在问题,因为您可以在 .ToInt64 中指定偏移量。
替代方案:使用 Buffer.BlockCopy,它可以在数组类型之间进行转换。
(Using unsafe code)
The following sample shows how to fill a 16 byte array with two long values, which is something BitConverter still can't do without an additional copy operation:
Or you could make your own StoreBytes() method:
Reading values from a byte array is no problem with BitConverter since you can specify the offset in .ToInt64.
Alternative : use Buffer.BlockCopy, which can convert between array types.