@@ -139,7 +139,7 @@ def _readinto_unlocked(self, b: bytearray) -> int:
139139 self ._fill_buf ()
140140
141141 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 )
143143 read_len = min (n , buffer_remaining )
144144
145145 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
268268 super ().__init__ (size , align )
269269 self ._fh = fh
270270 self .offset = offset
271+ self ._has_readinto = hasattr (self ._fh , "readinto" )
271272
272273 def _seek (self , pos : int , whence : int = io .SEEK_SET ) -> int :
273274 if self .size is None and whence == io .SEEK_END :
@@ -284,11 +285,10 @@ def _read(self, offset: int, length: int) -> bytes:
284285 return self ._fh .read (read_length )
285286
286287 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 )
292292
293293
294294class RelativeStream (RangeStream ):
@@ -308,7 +308,7 @@ class RelativeStream(RangeStream):
308308 align: The alignment size.
309309 """
310310
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 ):
312312 super ().__init__ (fh , offset , size , align )
313313
314314
@@ -440,7 +440,7 @@ def __init__(
440440 runlist : list [tuple [int , int ]],
441441 size : int ,
442442 block_size : int ,
443- align : Optional [ int ] = None ,
443+ align : int | None = None ,
444444 ):
445445 super ().__init__ (size , align or block_size )
446446
0 commit comments