我正在使用一个API,该API返回以\ x04(传输结束)字节终止的消息。我想很好地抓住这个字节。这是我写的代码:
# Only works if buffer size is 1 byte
read = lambda: self._sslsocket.recv(1)
response = b''
for data_buffer in iter(read, b'\x04'):
response += data_buffer
我想使此解决方案与任意缓冲区大小一起使用。有没有办法在不降低性能的情况下执行此操作,还是我应该在带有recv(1024)的True中使用生成器/经典类?
答案 0 :(得分:0)
您可以通过以下两种方式之一对其进行编码:
def read(bufsize):
return lambda: self._sslsocket.recv(bufsize)
或更简洁地说:
read = lambda bufsize: lambda: self._sslsocket.recv(bufsize)
样品用量:
response = b''
for data_buffer in iter(read(1), b'\x04'):
response += data_buffer
基本上,它们将本地read()
函数转换为非常专门的装饰器(返回函数的函数)。