【发布时间】:2013-05-22 18:18:22
【问题描述】:
我最初在 IRC 上问过这个问题,但这可能是那里真正得到回答的最糟糕的问题:
如何包装二进制流/缓冲区,而不只是将整个缓冲区读入内存,对其进行操作,然后根据结果创建一个新缓冲区?
具体来说,我说的是原始流是内存中的io.BytesIO 对象或open 设置b(二进制)标志的结果。
我目前的应用是在通过 HTTP 发送每个图像之前以块的形式调整图像的大小(这显然超出了这个问题的范围),但我通常也对如何处理改变的行为感兴趣一个缓冲区而不破坏其接口。
【问题讨论】:
-
您是在询问 lazy 操作,还是在之后回退流(这样,对于打开的文件,之后调用
read仍会从头开始读取)? -
是的,这样做的目的基本上是避免将巨大的对象拉入内存,然后对整个事物进行操作(所以,懒惰)。我对那种行为生成器的行为很好,每个块只能被读取一次,也就是说,倒带或非顺序块访问并不重要。 (我所说的“块”只是指整体的一部分,不一定是固定大小或包含独立有用的东西。)
-
哦,另一件事:如果原始流被缓冲并且具有一些与包装器知道如何处理的块大小不同的固定块大小,则可以拉入足够的块来进行处理,甚至如果原始流中的部分块将保留并需要转移到下一次处理迭代。
-
我会尝试将我的问题正式化一点,等等。
标签: python stream lazy-evaluation