Click here to Skip to main content
15,885,985 members
Articles / Programming Languages / Visual Basic
Article

Object Reader and Writer

Rate me:
Please Sign up or sign in to vote.
2.33/5 (3 votes)
23 Mar 2008LGPL3 27.9K   162   8   3
Reads/Writes an object from/to a stream

Introduction

Some days ago, I was writing a program that needed to parse a truetype font. I found that there is no class to fill a structure from a stream. So I wrote one myself.

Using the Code

Basically, if you only want to read/write a structure with the following conditions...

  1. All data is stored in fields
  2. All data is primitive type

... it will be very easy, like this:

VB.NET
'reader can be BinaryReader or Stream
result = ObjectReader(Of SomeStruct).Read(reader)
 
'writer can be BinaryWriter or Stream
ObjectWriter(Of SomeStruct).Write(obj, writer) 

Arrays and non-primitive types can also be read/written, but you need to add some attribute to the field. Here is an example:

VB.NET
<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

History

  • 2008-03-24: Initial post

License

This article, along with any associated source code and files, is licensed under The GNU Lesser General Public License (LGPLv3)


Written By
China China
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralMy vote of 1 Pin
Dave Kreskowiak22-Oct-09 19:06
mveDave Kreskowiak22-Oct-09 19:06 
GeneralTesting Pin
Stevepsi27-Mar-08 7:06
Stevepsi27-Mar-08 7:06 
GeneralRe: Testing Pin
SAPikachu1-Apr-08 17:25
SAPikachu1-Apr-08 17:25 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.