@@ -405,18 +405,19 @@ def _read(cls, fileobj, header, buffer_size=4):
405
405
n_streams = 0
406
406
407
407
while not eof :
408
+ buff = bytearray (buffer_size )
409
+ n_read = f .readinto (buff )
410
+ eof = n_read != buffer_size
408
411
409
- bytes_read = f .read (buffer_size )
410
- buffs .append (bytes_read )
411
- eof = len (bytes_read ) != buffer_size
412
+ buffs .append (buff )
412
413
413
414
# Make sure we've read enough to find a streamline delimiter.
414
- if fiber_marker not in bytes_read :
415
+ if fiber_marker not in buff :
415
416
# If we've read the whole file, then fail.
416
417
if eof :
417
418
# Could have minimal buffering, and have read only the
418
419
# EOF delimiter
419
- buffs = [b'' .join (buffs )]
420
+ buffs = [bytearray () .join (buffs )]
420
421
if not buffs [0 ] == eof_marker :
421
422
raise DataError (
422
423
"Cannot find a streamline delimiter. This file"
@@ -425,15 +426,13 @@ def _read(cls, fileobj, header, buffer_size=4):
425
426
# Otherwise read a bit more.
426
427
continue
427
428
428
- all_parts = b'' .join (buffs ).split (fiber_marker )
429
+ all_parts = bytearray () .join (buffs ).split (fiber_marker )
429
430
point_parts , buffs = all_parts [:- 1 ], all_parts [- 1 :]
430
431
point_parts = [p for p in point_parts if p != b'' ]
431
432
432
433
for point_part in point_parts :
433
434
# Read floats.
434
435
pts = np .frombuffer (point_part , dtype = dtype )
435
- # Enforce ability to write to underlying bytes object
436
- pts .flags .writeable = True
437
436
# Convert data to little-endian if needed.
438
437
yield pts .astype ('<f4' , copy = False ).reshape ([- 1 , 3 ])
439
438
0 commit comments