[IronPython] Portable use of pickle.dumps()
Michael Foord
fuzzyman at voidspace.org.uk
Fri May 29 23:18:57 CEST 2009
Robert Smallshire wrote:
> Michael,
>
>
>> Michael Foord wrote:
>>
>>> [snip...]
>>> Here is an example of getting a byte array from a binary pickle in
>>> IronPython:
>>>
>>>
>>>>>> import pickle
>>>>>> class A(object):
>>>>>>
>>> ... b = 'hello'
>>> ... c = (None, 'fish', 7.2, 7j)
>>> ... a = {1: 2}
>>> ...
>>>
>>>>>> p = pickle.dumps(A(), protocol=2)
>>>>>> p
>>>>>>
>>> u'\x80\x02c__main__\nA\nq\x00)\x81q\x01}q\x02b.'
>>>
>>>>>> from System import Array, Byte
>>>>>> a = Array[Byte](tuple(Byte(ord(c)) for c in p))
>>>>>> a
>>>>>>
>>> Array[Byte]((<System.Byte object at 0x0000000000000033 [128]>,
>>> <System.Byte obje...
>>>
>>>
>> And the converse:
>>
>> >>> p2 = ''.join(chr(c) for c in a)
>> >>> a2 = pickle.loads(p2)
>> >>> a2
>> <A object at 0x000000000000004E>
>> >>> a2.a
>> {1: 2}
>> >>> a2.b
>> 'hello'
>> >>> a2.c
>> (None, 'fish', 7.2, 7j)
>>
>
> As a result of applying your str <--> Array[Byte] transformations to my
> code, the persistence of pickles into SQLite BLOBs is now working as
> planned. :-)
>
> You'll also no doubt be pleased to hear that even with these extra
> transformations, the IronPython version is around twice as fast as CPython
> 2.6 on a benchmark performed under completely unscientific conditions -
> although there are many factors at play here...
>
>
Cool. :-)
Michael
> Thanks again,
>
> Rob
>
--
http://www.ironpythoninaction.com/
http://www.voidspace.org.uk/blog
More information about the Ironpython-users
mailing list