我正在尝试编写一个readline函数,该函数从I/O设备请求固定数量的字节并缓冲接收的数据并返回一行。
该设备没有自己的 readline(( 方法,只有一个 recv(bytes( 方法,因此是我的函数。
在这种情况下,recv(( 函数只是模拟 I/O 设备,纯粹用于测试/调试。
问题是预期输出中缺少">a"和">of",应该是:
peter piper picked a peck of pickled peppers
我也想不通为什么。
buff 是一个包含完整行的数组,而 xbuff 包含部分行。
str = ''
buff = [];
xbuff = b''
data = b"peterrnpiperrnpickedrnarnpeckrnofrnpickledrnpeppers"
def readline():
global buff,xbuff
raw = recv(10)
buff = (xbuff + raw).splitlines()
xbuff = b''
if len(raw) == 10 and not raw.endswith(b'rn'):
xbuff = buff.pop()
if len(buff) > 0:
line = buff.pop(0)
return line
return b''
def recv(chrs):
global data
out = data[:chrs]
data = data[chrs:]
return out
while True:
line = readline()
if line:
str += " "+line.decode()
else:
print(str)
break
peter piper picked peck pickled peppers
糟糕,需要附加到缓冲区而不是替换它
buff += (xbuff + raw).splitlines()
但这是最蟒蛇/最有效的方法吗?