cStringIO,读取块中的字节直到EOF?

Posted

技术标签:

【中文标题】cStringIO,读取块中的字节直到EOF?【英文标题】:cStringIO, reading bytes in chunks until EOF? 【发布时间】:2012-08-24 09:49:07 【问题描述】:

我想一次读取一个 1MB 的字符串,然后通过 XMLRPC 上传,这是最好的方法吗?有什么需要注意的吗?

while data.read(1048576) != None:
    data.seek(1048576, 1)
    if not rpc_srv.chunk_upload(tf_uuid, data_chunk):
        raise Exception('Failed to upload data.')

【问题讨论】:

【参考方案1】:

您可以使用带有标记的iter() function 来简化您的循环:

for data_chunk in iter(lambda: data.read(1048576), ''):
    if not rpc_srv.chunk_upload(tf_uuid, data_chunk):
        raise Exception('Failed to upload data.')

不需要.seek().read() 调用已经更新了位置。

【讨论】:

实施此操作后,我开始收到“内存错误” @Jharwood:创建一个带有完整回溯的新问题。例如,这可能是其他地方完全不相关的问题,或者可能是您的 cStringIO 实例的大小。

以上是关于cStringIO,读取块中的字节直到EOF?的主要内容,如果未能解决你的问题,请参考以下文章

多线程中boost asio中的随机EOF

读取 cin 直到 EOF

基准缓存字典导致“读取字节时出现意外的 EOF”

检查 string::getline 中的 eof

一次从文件中读取 512 个字节并检查里面有啥?

读取 QTcpSocket