Хранение сериализуемых объектов в базе данных - PullRequest
6 голосов
/ 22 февраля 2011

Я пишу приложение, которое должно записать объект в базу данных.

Для простоты я хочу сериализовать объект.

Но ObjectOuputStream, необходимый для той же цели, имеет только один конструктор, который принимает любой подкласс OutputStream в качестве параметра.

Какой параметр ему нужно передать?

Ответы [ 4 ]

8 голосов
/ 22 февраля 2011

Вы можете передать ByteArrayOutputStream и затем сохранить полученный stream.toByteArray() в базе данных как BLOB-объект.

Убедитесь, что вы указали serialVersionUID для класса, так как в противном случае вам будет трудно при добавлении / удалении поля.

Также рассмотрите версию XML для сериализации объектов - XMLEncoder, если вам нужно немного больше читаемых человеком данных.

И, в конечном итоге, вы можете захотеть преобразовать вашу объектную модель в реляционную модель через среду ORM. JPA (Hibernate / EclipseLink / OpenJPA) обеспечивает объектно-реляционное сопоставление для работы с объектами, но их поля и отношения сохраняются в СУБД.

4 голосов
/ 22 февраля 2011

Использование ByteArrayOutputStream должно быть достаточно простым способом преобразования в byte[] (вызовите toByteArray после того, как вы сбросили). В качестве альтернативы есть Blob.setBinaryStream (что на самом деле возвращает OutputStream).

Возможно, вы захотите пересмотреть вопрос об использовании базы данных в качестве базы данных ...

2 голосов
/ 22 февраля 2011

К этому можно добавить одну вещь. Сериализация Java - хороший инструмент общего назначения. однако, это может быть немного многословно. Вы можете попробовать распаковать сериализованные данные. Вы можете сделать это, поместив поток GZIP между потоком объектов и потоком байтов. это потребует небольшого количества дополнительного процессора, но это часто является достойным компромиссом для доставки дополнительных байтов по сети и помещения их в дб.

2 голосов
/ 22 февраля 2011

например, создать ByteArrayOutputStream и передать его конструктору ObjectOuputStream

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...