У меня были проблемы с simimlar, делающие подобные вещи с данными из файла CSV.
DRapp прав, вероятно, это самый чистый способ разрешения ситуации, если пользователь не ожидает, что все прочитает все на уровне root за один удар.
Теоретически, все, что вам нужно, это быть открытым или закрытым, но вы можете хранить только эту базовую информацию в строке, и она не должна быть слишком громоздкой.
и, как предлагает DRapp, вы просто загружаете данные в поток, и при небольшом внимательном управлении положением вы сможете читать и писать.
Ваша самая большая проблема заключается в том, что если, скажем, в точке x вы хотите заменить данные в узле y на некоторые данные другой длины, вы либо в конечном итоге получите пробел в файле, либо перезапишите следующий узел / часть этого.
таким образом, каждый раз, когда производится изменение, по существу, вам необходимо передать файл в другой файл до того момента, когда начнется редактирование, затем поток в редактировании, а затем поток в остальной части файла.
Вы должны иметь возможность делать все это с объектами потокового чтения и записи потоков, которые вы размещаете поверх 1 экземпляра потока в исходном файле, а также потокового редактора во втором временном файле.
Это никогда не будет быстрым, хотя бы потому, что запись обновлений в файл 1.x gig занимает много времени на жестком диске, и никакая оптимизация не изменит этого.