我们系统中常用的一种文件格式是base64编码的pickles-目前,我可以用这种简单的格式和如下简单的代码来转换字符串:
def dumps( objinput ):
"""
Return an encoded cPickle
"""
return cpickle_dumps( objinput ).encode( ENCODING )
def loads( strinput ):
"""
Return an object from an encoded cpickle
"""
return cpickle_loads( strinput.decode( ENCODING ) )
我想实现一个名为“load”的新函数,它的工作原理与标准pickle load函数非常相似,只是它将从流中读取足够的字节,然后返回解码后的对象。这里的技巧是读取足够的字节—cpickle.load函数执行此操作,它从流中弹出字节,直到pickled数据完成。我的新功能需要如下所示:
def load( stream_input ):
""""
Return just one object popped from the stream.
If the stream has ended, raise an exception
Do not over-read the stream.
当数据是base64编码的pickle时,我该怎么做呢?这里的困难似乎是,通过包装cpickle.load函数或包装输入流来实现这一点并不明显,另外一个困难是,一个字节的pickle数据可能被编码为base64的多个字节,因此不清楚如何调整流的输入。将(n)读取到guaranteed在编码的输入流为base64时返回n字节的解码数据。