对于这个特定的项目,我需要将我的实体层(由POJO组成)序列化为文件。由于我需要更新特定对象,因此我希望每个序列化对象使用一个文件。
示例:Customer --ArrayList->订单 - 阵列列表 - >产品
当我编辑客户,然后使用java.io.Serializable接口,所有字段及其字段(请纠正我,如果错误)将其序列化时,会被序列化。
如何以每个文件只使用一个对象的方式应用序列化?我已经给每个对象一个uniqe UUID,在序列化时用作文件名。
如果有任何基于文件的ORM框架,那就更好了;)
答案 0 :(得分:0)
您始终可以使用readObject
和writeObject
来读取和编写可序列化对象。以下是示例代码:
import java.io.*;
import java.util.*;
import java.util.logging.*;
public class ExerciseSerializable {
public static void main(String... aArguments) {
//create a Serializable List
List<String> quarks = Arrays.asList(
"up", "down", "strange", "charm", "top", "bottom"
);
//serialize the List
//note the use of abstract base class references
try{
//use buffering
OutputStream file = new FileOutputStream( "quarks.ser" );
OutputStream buffer = new BufferedOutputStream( file );
ObjectOutput output = new ObjectOutputStream( buffer );
try{
output.writeObject(quarks);
}
finally{
output.close();
}
}
catch(IOException ex){
fLogger.log(Level.SEVERE, "Cannot perform output.", ex);
}
//deserialize the quarks.ser file
//note the use of abstract base class references
try{
//use buffering
InputStream file = new FileInputStream( "quarks.ser" );
InputStream buffer = new BufferedInputStream( file );
ObjectInput input = new ObjectInputStream ( buffer );
try{
//deserialize the List
List<String> recoveredQuarks = (List<String>)input.readObject();
//display its data
for(String quark: recoveredQuarks){
System.out.println("Recovered Quark: " + quark);
}
}
finally{
input.close();
}
}
catch(ClassNotFoundException ex){
fLogger.log(Level.SEVERE, "Cannot perform input. Class not found.", ex);
}
catch(IOException ex){
fLogger.log(Level.SEVERE, "Cannot perform input.", ex);
}
}
// PRIVATE //
//Use Java's logging facilities to record exceptions.
//The behavior of the logger can be configured through a
//text file, or programmatically through the logging API.
private static final Logger fLogger =
Logger.getLogger(ExerciseSerializable.class.getPackage().getName())
;
}
答案 1 :(得分:0)
我不熟悉这样的框架。
你可以做的是使用其他框架,如apache BeanUtils,以执行以下递归算法:
A.为每个对象获取其属性(假设对象是Java bean)
B.对于每个原始字段,将所有基元写入文件(您可以使用反射来确定字段是否为原始字段)。
C.对于每个非原始文件,在文件中编写一个特殊部分,指向将包含作为字段值的对象的文件名。
D.递归调用每个非原始字段的算法。
收藏可以采用类似的方法 -
HashMap,ArrayList等。
原始元素的序列化代码可以是@Anshu提供的代码