从对象创建对象输出流
问题描述:
我想在ObjectOutputStream
上创建,但我不想将对象保存在文件中,那么该怎么做?所有的教程(我发现)认为,大约只有文件的方式:从对象创建对象输出流
FileOutputStream fos = new FileOutputStream("t.tmp");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(new Date());
oos.close();
我想将对象存储到数据库中,所以我需要从PreparedStatement
类指定方法setBinaryStream()
流。
谢谢回答...
答
将其存储在字节数组中。您可以使用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
列中。
答
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream os = new ObjectOutputStream(bos);
os.writeObject(new Date());
os.close();
byte[] data = bos.toByteArray();
所以,现在你有一个字节数组,做你想要做什么用。
答
您特别需要使用outputstream来写入数据库吗?在尝试编写outputstream实现之前,我会认真考虑查看持久性API。因为连接细节等可能会变得棘手。
看看link text并记住它也可以在J2SE中使用。
我绝对知道这不是一个好习惯,在我看来,没有理由不知道这种编程方式:-) – coubeatczech 2010-05-20 12:00:18
好吧,让我们假设你知道你在做什么:)不客气。 – BalusC 2010-05-20 12:16:46