Перезапись/вставка информации в середину файла

Модератор: Absurd

Ответить
iAlexander
Сообщения: 4
Зарегистрирован: 03 сен 2004, 12:18

Привет всем.
Собственно сам вопрос ниже (вопрос), а здесь - предистория к нему.
Возникла задача - записывать и считывать объекты целиком как последовательность байтов (В С++ это у меня получалось на ура). Преимущество в том, что не приходится писать каждый член класса по отдельности. Скидываем целый объект. Реализуется это в java имплементированием интерфейса Serializable ( тот класс, который сбрасываем) и следующим кодом

Код: Выделить всё

		FileOutputStream fileStream = new FileOutputStream("object.data");
		ObjectOutputStream objectStream = new ObjectOutputStream(fileStream);
		objectStream.writeObject(this);
Но одна проблема: у меня после записи этого класса в файле идет несколько гигов двоичной инфы (объект содержит ее краткое описание). А если объект увеличится в размерах? Он уже не поместится в пространство от начала файла и до начала двоичных данных.

Вопрос: как в Java переписать часть файла (в серединке), при этом, возможно, не только overwrite' ить, но еще и добавлять инфу в серединку?
Можно ли как-нибудь вырезать часть из серединки, а затем туда вставить блок?
Предоставляет ли Java какие-нибудь средства? Предупреждая гневные возгласы, скажу, что поиском я воспользовался, прочитал и про то, что в C стандартных способов нет (хотя я и писал так, открыв файл на append — a+), и про memmove.
Этот вопрос немного посложнее.
Как мне обновить запись объекта в файле? Она может увеличиться, может уменьшиться.
Можно ли, допустим, полностью удалить предыдущую запись объекта, а затем вставить новую?
Deady
Сообщения: 193
Зарегистрирован: 17 фев 2004, 13:13
Откуда: Москва
Контактная информация:

а данные обязательно в одном файле хранить?
так то данные разного характера - класс явы + бинарник.
может проще хранить класс в одном файле, бинарные данные в другом, и проблема исчезает.
а если уж важно соблюсти формат файла с бинарными данными, то можно хранить в начале объект - заглушку фиксированного размера и все.
iAlexander
Сообщения: 4
Зарегистрирован: 03 сен 2004, 12:18

Да, обязательно в одном файле. Условия диктую не я. Я сам не рад такой постановке.
Насчет заглушки я думал... Но ведь неизвестно, до каких пределов может расти объект. Он может и выйти за пределы заглушки.
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

java.nio Смотрел?
2B OR NOT(2B) = FF
Ответить