@@ -139,7 +139,7 @@ def _readinto_unlocked(self, b: bytearray) -> int:
139
139
self ._fill_buf ()
140
140
141
141
buffer_pos = self ._pos - self ._pos_align
142
- buffer_remaining = max (0 , min ( align , self ._buf_size ) - buffer_pos )
142
+ buffer_remaining = max (0 , self ._buf_size - buffer_pos )
143
143
read_len = min (n , buffer_remaining )
144
144
145
145
b [:read_len ] = self ._buf [buffer_pos : buffer_pos + read_len ]
@@ -268,6 +268,7 @@ def __init__(self, fh: BinaryIO, offset: int, size: int, align: int = STREAM_BUF
268
268
super ().__init__ (size , align )
269
269
self ._fh = fh
270
270
self .offset = offset
271
+ self ._has_readinto = hasattr (self ._fh , "readinto" )
271
272
272
273
def _seek (self , pos : int , whence : int = io .SEEK_SET ) -> int :
273
274
if self .size is None and whence == io .SEEK_END :
@@ -284,11 +285,10 @@ def _read(self, offset: int, length: int) -> bytes:
284
285
return self ._fh .read (read_length )
285
286
286
287
def _readinto (self , offset : int , buf : memoryview ) -> int :
287
- if not hasattr (self ._fh , "readinto" ):
288
- return self ._readinto_fallback (offset , buf )
289
-
290
- self ._fh .seek (self .offset + offset )
291
- return self ._fh .readinto (buf )
288
+ if self ._has_readinto :
289
+ self ._fh .seek (self .offset + offset )
290
+ return self ._fh .readinto (buf )
291
+ return self ._readinto_fallback (offset , buf )
292
292
293
293
294
294
class RelativeStream (RangeStream ):
@@ -308,7 +308,7 @@ class RelativeStream(RangeStream):
308
308
align: The alignment size.
309
309
"""
310
310
311
- def __init__ (self , fh : BinaryIO , offset : int , size : Optional [ int ] = None , align : int = STREAM_BUFFER_SIZE ):
311
+ def __init__ (self , fh : BinaryIO , offset : int , size : int | None = None , align : int = STREAM_BUFFER_SIZE ):
312
312
super ().__init__ (fh , offset , size , align )
313
313
314
314
@@ -438,7 +438,7 @@ def __init__(
438
438
runlist : list [tuple [int , int ]],
439
439
size : int ,
440
440
block_size : int ,
441
- align : Optional [ int ] = None ,
441
+ align : int | None = None ,
442
442
):
443
443
super ().__init__ (size , align or block_size )
444
444
0 commit comments