создайте объектный поток вывода из объекта

Я хочу создать на ObjectOutputStream, но я не хочу сохранять объект в файле, поэтому как сделать это? Во всех учебных руководствах (что я нашел) говорится только о файле путь:

        FileOutputStream fos = new FileOutputStream("t.tmp");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(new Date());
        oos.close();

Я хочу хранить объект в базу данных, таким образом, я должен указать поток в методе setBinaryStream() от класса PreparedStatement.

Спасибо за ответ...

8
задан coubeatczech 20 May 2010 в 11:52
поделиться

3 ответа

Вместо этого храните его в байтовом массиве. Для этого вы можете использовать ByteArrayOutputStream . Таким образом, вы можете использовать PreparedStatement#setBytes().

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(new Date());
oos.close();
// ...
preparedStatement.setBytes(i, baos.toByteArray());

При этом, это довольно хороший запах. Вы уверены, что вам нужно сериализовать Java-объекты в базу данных? В этом случае они будут неиндексируемыми и непоисковыми. Если вы, например, храните каждого Person сериализованным в БД, вы больше не сможете сделать SELECT * FROM person WHERE name = 'John'. Обычной практикой является сопоставление 1:1 сущности и таблицы БД. Например, Дата может прекрасно храниться в столбце DATETIME/TIMESTAMP.

9
ответ дан 5 December 2019 в 12:08
поделиться
ByteArrayOutputStream bos = new ByteArrayOutputStream();

ObjectOutputStream os = new ObjectOutputStream(bos);
os.writeObject(new Date());
os.close();

byte[] data = bos.toByteArray();

Итак, теперь у вас есть массив байтов и делайте с ним что хотите.

5
ответ дан 5 December 2019 в 12:08
поделиться

вам конкретно нужно использовать outputstream для записи в базу данных? Я бы серьезно рассмотрел возможность использования persistence api, прежде чем пытаться написать реализацию outputstream... поскольку детали подключения и т.д. могут оказаться сложными в управлении.

посмотрите на текст ссылки и помните, что его можно использовать и в J2SE.

0
ответ дан 5 December 2019 в 12:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: