ST 4U 333: Binary Object Storage in VA Smalltalk
Today's Smalltalk 4 You looks at the Swapper framework in VA, which can be used to save and restore arbitrary objects to disk in a binary format. If you have trouble viewing it here in the browser, you can also navigate directly to YouTube. To watch now, click on the image below:
If you have trouble viewing that directly, you can click here to download the video directly. If you need the video in a Windows Media format, then download that here.
You can also watch it on YouTube:
Today we'll take a look at how you can easily store objects in a binary format in external files. VA provides the Swapper framework for this, and it's pretty easy to use. Our example uses a simple point, but you can use theSwapper to store arbitrary objects to a file:
"Binary Storage using the Swapper" targetObject:= 2@7. (stream := CfsWriteFileStream open: 'testfile.swp') isCfsError ifTrue: [self error: stream printString]. "Set to binary mode" stream isBytes: true. dumper := ObjectDumper new. dumper unload: targetObject intoStream: stream. stream close. dumper hasErrorOccurred ifTrue: [self error: dumper currentErrorString].
Note the you don't really check for exceptions; that's all done inside the framework. Rather, you check for errors after your code executes. Once you've got the objects on disk, you'll eventually want them back in Smalltalk:
"load the object from the binary file" (stream := CfsReadFileStream open: 'testfile.swp') isCfsError ifTrue: [self error: stream printString]. "set binary" stream isBytes: true. loader := ObjectLoader new. targetObject := loader loadFromStream: stream. stream close. loader hasErrorOccurred ifTrue: [self error: loader currentErrorString]. targetObject inspect.
Execute that, and you should see your Point object:
Need more help? There's a screencast for other topics like this which you may want to watch. Questions? Try the "Chat with James" Google gadget over in the sidebar.
Tags: smalltalk, va smalltalk, swapper
Enclosures:
[st4u333-iPhone.m4v ( Size: 3535051 )]