создать поток вывода объекта из объекта - PullRequest
8 голосов
/ 20 мая 2010

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

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

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

Спасибо, что ответили ...

Ответы [ 3 ]

7 голосов
/ 20 мая 2010

Вместо этого сохраните его в байтовом массиве. Для этого вы можете использовать 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. Например, Date может идеально храниться в столбце DATETIME / TIMESTAMP.

5 голосов
/ 20 мая 2010
ByteArrayOutputStream bos = new ByteArrayOutputStream();

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

byte[] data = bos.toByteArray();

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

0 голосов
/ 20 мая 2010

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

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

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