对象读取器和写入器
从流中读取/写入对象
引言
几天前,我正在编写一个程序,需要解析一个TrueType字体。我发现没有类可以从流中填充结构体。所以我自己写了一个。
Using the Code
基本上,如果你只想读取/写入满足以下条件的结构体...
- 所有数据都存储在字段中
- 所有数据都是原始类型
...这将非常容易,就像这样
'reader can be BinaryReader or Stream
result = ObjectReader(Of SomeStruct).Read(reader)
'writer can be BinaryWriter or Stream
ObjectWriter(Of SomeStruct).Write(obj, writer)
数组和非原始类型也可以读取/写入,但你需要为字段添加一些属性。这里有一个例子
<System.Runtime.InteropServices.StructLayout_
(Runtime.InteropServices.LayoutKind.Sequential)> _
Public Structure TestStruct
Public aInt As Integer
Public bInt64 As Long
<ArraySize(16)> _
Public bArr As Byte()
<ArraySize(4)> _
Public dIArr As Integer()
<ObjectReaderWriterInclude()> _
Public eNested As TestStruct3
Public fNotInclude As TestStruct2 ' this field will not be read/written
<ObjectReaderWriterInclude()> _
Public gNested2 As TestStruct2
<ArraySize(2), ObjectReaderWriterInclude()> _
Public hNestedArray As TestStruct2()
End Structure
<System.Runtime.InteropServices.StructLayout_
(Runtime.InteropServices.LayoutKind.Sequential)> _
Public Structure TestStruct2
Public aB As Byte
<ArraySize(10)> _
Public bBArr As Byte()
End Structure
<System.Runtime.InteropServices.StructLayout_
(Runtime.InteropServices.LayoutKind.Sequential)> _
Public Class TestStruct3
Public aInt As Integer
<ObjectReaderWriterInclude()> _
Public bNested As TestStruct2
End Class
历史
- 2008-03-24:初始发布