[Pharo-project] [squeak-dev] Any serializer can customize serialization strategy?

Masashi UMEZAWA masashi.umezawa at gmail.com
Sat Oct 15 13:26:43 UTC 2011


Hi,

Hernán Morales Durand <hernan.morales at gmail.com> wrote:
>Is there any serializer (Fuel/StOMP/Ma object
>serialization/BOSS/SRP/SIXX??) which let me attach an external
>compressor/decompressor for specific Strings to the
>serialization/deserialization process?

Mariano Martinez Peck <marianopeck at gmail.com> wrote:
> I think StOMP should support this as well:
> http://stomp.smalltalk-users.jp/home/how-to-use-stomp/hook-methods

Yes. StOMP does support such kind of custom serialization.

Pattern 1: Using Memento.

StOMP has two basic hook methods (stompWriteValue/stompReadValue).
With a memento pattern, you can customize
serialization/deserialization behavior easily.

SpecificString>> stompWriteValue
 ^ StringCompressedMemento on: self

StringCompressedMemento>> stompReadValue
 ^ SpecificString on: self uncompressToString

SpecificString is a mere wrapper class (holding original string). And
StringCompressedMemento should implement compress/uncompress logic.

Pattern 2: Subclassing Writer/Reader

Pattern 1 is usable, but it is basically suitable for pointer objects.
For String-like objects, defining a new String wrapper and Memento is
overwhelming. You can also subclass StompWriter/Reader for adding
custom serialization/deserialization behaviors.

MyStompWriter>>writeString: aString
 (self isSpecificString: aString) ifTrue: [^super writeString: (self
compressString: aString)].
 ^ super writeString: string

MyStompReader>>readByteString
 | rawString |
 rawString := self basicReadObject asString.
 ^ (self isCompressedString: rawString)
	ifTrue: [self uncompressString: rawString]
	ifFalse: [rawString]

You have to add some marking headers to the original string for
determining it should be compressed/uncompressed. (Yes. this is a
little awkward, but works well).

I've attached working sample codes. So please see for details.

Best regards,
-- 
[:masashi | ^umezawa]
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Stomp-Exmaple1.st
Type: application/octet-stream
Size: 3483 bytes
Desc: not available
Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20111015/bf9adfac/Stomp-Exmaple1.obj
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Stomp-Example2.st
Type: application/octet-stream
Size: 2147 bytes
Desc: not available
Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20111015/bf9adfac/Stomp-Example2.obj


More information about the Squeak-dev mailing list