Я недавно работал над скриптами, которые берут файл, куски его и анализируют каждую часть. Поскольку позиции chunking зависят от содержимого, мне нужно прочитать его по одному байт за раз. Я не нуждаюсь в произвольном доступе, просто читая его линейно от начала до конца, выбирая определенные позиции, когда я иду, и уступаю содержимое фрагмента из предыдущей выбранной позиции в текущую.
Было очень удобно использовать файл с отображением памяти, обернутый bytearray
. Вместо того, чтобы уступать кусок, я получаю смещение и размер куска, оставляя внешнюю функцию срезать его.
Это было также быстрее, чем накапливать текущий кусок в bytearray
(и намного быстрее, чем накапливать в bytes
!). Но у меня есть определенные опасения, которые я хотел бы затронуть:
- Является ли копирование данных bytearray?
- Я открываю файл как
rb
иmmap
с помощьюaccess=mmap.ACCESS_READ
. Ноbytearray
является, в принципе, изменчивым контейнером. Это проблема производительности? Есть ли контейнер для чтения, который я должен использовать? - Поскольку я не накапливаю в буфере, я произвольно получаю доступ к
bytearray
(и, следовательно, к базовому файлу). Несмотря на то, что это может быть буферизировано, я боюсь, что будут проблемы в зависимости от размера файла и системной памяти. Это действительно проблема?