从对象创建对象输出流

从对象创建对象输出流

问题描述:

我想在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列中。

+0

我绝对知道这不是一个好习惯,在我看来,没有理由不知道这种编程方式:-) – coubeatczech 2010-05-20 12:00:18

+0

好吧,让我们假设你知道你在做什么:)不客气。 – BalusC 2010-05-20 12:16:46

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中使用。