Это не на самом деле о истолковано природе Пайтона: BytesIO
реализован в Python *, такой же, как StringIO
, но все еще бьется файл I/O ,
Фактически, StringIO
работает быстрее, чем файл ввода/вывода под StringIO
. Идеальный вариант использования (одна запись начинается с пустого буфера). На самом деле, если запись достаточно велика, она даже обыграет cStringIO
. См. Мой вопрос here.
Так почему же StringIO
считается «медленным»? StringIO
Настоящая проблема подкрепляется неизменяемыми последовательностями, str
или unicode
. Это нормально, если вы только пишете один раз, очевидно. Но, как указал tdelaney's answer на мой вопрос, он замедляет тонну (например, 10-100x) при записи в случайные местоположения, так как каждый раз, когда он получает запись в середине, он должен скопировать всю последовательность поддержки.
BytesIO
не имеет этой проблемы, так как он поддерживается (изменчивым) bytearray
. Аналогично, независимо от того, что делает cStringIO
, он, кажется, обрабатывает случайные записи намного легче. Я предполагаю, что он нарушает правило неизменяемости внутри, так как строки C изменяемы.
* Ну, версия в _pyio
есть, во всяком случае. Стандартная версия библиотеки в io
написана на C.
Спасибо за ваш ответ. – JanuaryStar