А в чём серьёзное усложение записи? Для записи ведь можно создавать рядом файл, а после окончания записи заменять на него исходный.

Для определения длины значения в общем случае надо считать все смещения, а не целиком все данные. И тут особой сложности я не вижу. Может я чего-то не понимаю?