Skip to content

Commit f5eafcf

Browse files
committed
FIX: Load TckFile streamlines using bytearray
1 parent d7a619f commit f5eafcf

File tree

1 file changed

+7
-8
lines changed

1 file changed

+7
-8
lines changed

nibabel/streamlines/tck.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -405,18 +405,19 @@ def _read(cls, fileobj, header, buffer_size=4):
405405
n_streams = 0
406406

407407
while not eof:
408+
buff = bytearray(buffer_size)
409+
n_read = f.readinto(buff)
410+
eof = n_read != buffer_size
408411

409-
bytes_read = f.read(buffer_size)
410-
buffs.append(bytes_read)
411-
eof = len(bytes_read) != buffer_size
412+
buffs.append(buff)
412413

413414
# 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:
415416
# If we've read the whole file, then fail.
416417
if eof:
417418
# Could have minimal buffering, and have read only the
418419
# EOF delimiter
419-
buffs = [b''.join(buffs)]
420+
buffs = [bytearray().join(buffs)]
420421
if not buffs[0] == eof_marker:
421422
raise DataError(
422423
"Cannot find a streamline delimiter. This file"
@@ -425,15 +426,13 @@ def _read(cls, fileobj, header, buffer_size=4):
425426
# Otherwise read a bit more.
426427
continue
427428

428-
all_parts = b''.join(buffs).split(fiber_marker)
429+
all_parts = bytearray().join(buffs).split(fiber_marker)
429430
point_parts, buffs = all_parts[:-1], all_parts[-1:]
430431
point_parts = [p for p in point_parts if p != b'']
431432

432433
for point_part in point_parts:
433434
# Read floats.
434435
pts = np.frombuffer(point_part, dtype=dtype)
435-
# Enforce ability to write to underlying bytes object
436-
pts.flags.writeable = True
437436
# Convert data to little-endian if needed.
438437
yield pts.astype('<f4', copy=False).reshape([-1, 3])
439438

0 commit comments

Comments
 (0)