Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2010, 21:42   #1
ZigaZaga
Пользователь
 
Регистрация: 20.02.2010
Сообщений: 27
По умолчанию как это сделать правильно?(сериализация)

Добрый день!
Хочу иметь возможность добавлять к файлу, в котором лежат сериализованые объекты, сериализованые объекты.
Пытаюсь в файл записать обычный INT. И сразу его читаю.
И так запускаю код несколько раз. Размер файла и содержимое в конце увеличивается на эти несколько раз(т.е. действительно происходит добавление в конец файла). НО каждый раз выводится только то, одно число, а не несколько. Видимо я не понимаю какую-то значительную часть, поэтому буду рад даже ссылке)
Код:
import java.io.*;
 public class seriali {
    
    public static void main(String[] args) {
    	try{
    		ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("db", true));
	    	o.writeInt(14);
	    	o.flush();
	    	o.close();
    	}
    	catch(IOException e) {    	}
    	try{
    		ObjectInputStream oi = new ObjectInputStream (new FileInputStream("db"));
		while(true)
			System.out.println(oi.readInt());	
				
    	}
    	catch(Exception e ){    	}
		
    }
}
ZigaZaga вне форума Ответить с цитированием
Старый 26.09.2010, 22:23   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
new FileOutputStream("db", true)
тут надо false
вы бы почитали чтоль описание параметров конструктора(этот параметр называется append=добавлять)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 26.09.2010, 22:38   #3
ZigaZaga
Пользователь
 
Регистрация: 20.02.2010
Сообщений: 27
По умолчанию

Пепел Феникса, не понял что вы имели ввиду. и так знаю что этот параметр значит "добавлять". так мне же это и надо!
ZigaZaga вне форума Ответить с цитированием
Старый 27.09.2010, 08:29   #4
alexinspir
Новичок
Джуниор
 
Аватар для alexinspir
 
Регистрация: 26.08.2008
Сообщений: 1,010
По умолчанию

когда открывается ObjectOutputStream в поток сразу пишется следующий поток байтов:
\xAC \xED \x00 \x05
что является своеобразным BOM для сериализованных Java объектов.
попытайтесь решить эту проблему сами, если же у вас не получится, я подскажу решение.
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение - плюс к премии. Выдал бан - лучший модератор месяца со всеми вытекающими.
alexinspir вне форума Ответить с цитированием
Старый 27.09.2010, 23:13   #5
ZigaZaga
Пользователь
 
Регистрация: 20.02.2010
Сообщений: 27
По умолчанию

alexinspir, спасибо большое за ответ!
совершенно тривиально "решил" проблему - просто при повторном записи(т.е. добавлении к файлу) пропускаю первые 4 байта.
Хотел бы у вас узнать как правильно сделать?
что такое "BOM"?
и ещё. где вы это вообще прочитали?

ещё раз огромное спасибо!
ZigaZaga вне форума Ответить с цитированием
Старый 28.09.2010, 05:14   #6
alexinspir
Новичок
Джуниор
 
Аватар для alexinspir
 
Регистрация: 26.08.2008
Сообщений: 1,010
По умолчанию

Цитата:
Сообщение от ZigaZaga Посмотреть сообщение
alexinspir, спасибо большое за ответ!
совершенно тривиально "решил" проблему - просто при повторном записи(т.е. добавлении к файлу) пропускаю первые 4 байта.
Хотел бы у вас узнать как правильно сделать?
вы выбрали правильный способ обычно в таких случаях создают временный файл, в который записываются новые сериализованные объекты. по окончании записи копируют содержимое второго файла в конец первого, пропуская BOM
Цитата:
Сообщение от ZigaZaga Посмотреть сообщение
что такое "BOM"?
ну вообще Byte Order Mark, но я использовал со смыслом "сигнатура"
Цитата:
Сообщение от ZigaZaga Посмотреть сообщение
и ещё. где вы это вообще прочитали?
нигде, это просто опыт
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение - плюс к премии. Выдал бан - лучший модератор месяца со всеми вытекающими.
alexinspir вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
переходим на евро как сделать правильно IRMA230 Microsoft Office Excel 22 07.07.2010 18:36
Как это сделать? Sensizu Общие вопросы Delphi 11 04.01.2010 13:33
Как такое сделать (извените. но даже не знаю как это называется) Van'Denis HTML и CSS 3 30.08.2009 10:46
Как правильно сделать выборку Minotavr_x86 БД в Delphi 9 04.03.2009 19:56
как это сделать? DeDoK Общие вопросы Delphi 2 11.07.2008 04:41