Click here to Skip to main content
Licence LGPL3
First Posted 23 Mar 2008
Views 10,051
Downloads 27
Bookmarked 8 times

Object Reader and Writer

By | 23 Mar 2008 | Article
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:

'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:

<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)

About the Author

SAPikachu



China China

Member



Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralMy vote of 1 PinmvpDave Kreskowiak19:06 22 Oct '09  
GeneralTesting PinmemberStevepsi7:06 27 Mar '08  
GeneralRe: Testing PinmemberSAPikachu17:25 1 Apr '08  
Sorry, this is my first time of posting article here, so there may be something that I did wrong. But I have tested my code before posting here, It completed very well. Could you please give me some advice to improve this article? Thanks.

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

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

Permalink | Advertise | Privacy | Mobile
Web02 | 2.5.120529.1 | Last Updated 23 Mar 2008
Article Copyright 2008 by SAPikachu
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid