Phương thức
import io
print[io.DEFAULT_BUFFER_SIZE]
0 thay đổi vị trí tệp hiện tại. Đối số offset cho biết số byte được di chuyển từ đầu tệp
def read_from_buffer[self, pos, numbytes = None]:
vs = self.videostatus
piece_index, piece_offset = self.piecepos_from_bytepos[vs, pos]
if DEBUG:
log['vod::read_from_buffer: pos', pos, 'numbytes', numbytes, 'piece_index', piece_index, 'piece_offset', piece_offset]
data = ''
for i in xrange[piece_index, vs.last_piece + 1]:
piece = self.get_piece[i]
if piece is None:
break
if piece_offset > 0:
chunk = piece[piece_offset:]
piece_offset = 0
else:
chunk = piece
data += chunk
pos += len[chunk]
if DEBUG:
log['vod::read_from_buffer: got whole piece: index', i, 'chunk_len', len[piece], 'data_len', len[data], 'pos', pos]
if numbytes is not None and len[data] >= numbytes:
if DEBUG:
log['vod::read_from_buffer: got enough data: numbytes', numbytes, 'data_len', len[data]]
return data
self.proxy_cond.acquire[]
try:
for bstart, bdata in self.proxy_buf.iteritems[]:
bend = bstart + len[bdata] - 1
if bstart 0:
chunk = piece[piece_offset:]
piece_offset = 0
else:
chunk = piece
data += chunk
pos += len[chunk]
if DEBUG:
log['vod::read_from_buffer: got whole piece: index', i, 'chunk_len', len[piece], 'data_len', len[data], 'pos', pos]
if numbytes is not None and len[data] >= numbytes:
if DEBUG:
log['vod::read_from_buffer: got enough data: numbytes', numbytes, 'data_len', len[data]]
return data
self.proxy_cond.acquire[]
try:
for bstart, bdata in self.proxy_buf.iteritems[]:
bend = bstart + len[bdata] - 1
if bstart