所以我有这个数组的对象列表,我想以二进制格式存储到一个dat文件中。
objectA类具有此构造函数
public ObjectA(String aString,int aNumber ,String[] sampleA){
this.aString = aString;
this.aNumber = aNumber;
this.sampleA= sampleA;
}
在另一个类文件中我在类上实例化了这个并用ObjectA对象填充了arraylist
private static ArrayList<ObjectA> objectA = new ArrayList<ObjectA>();
我有这个方法
private static void createFile() {
System.out.println("Creating file...");
try {
FileOutputStream fileOut = new FileOutputStream("file.dat");
ObjectOutputStream objectOut = new ObjectOutputStream(fileOut);
for (ObjectA o : objectA) {
objectOut.writeObject(o); //write the object
}
objectOut.close(); //then close the writer
}CATCH EXCEPTIONS***************{}
}
但是我在尝试运行时遇到了这个错误 createFile()出错! java.io.NotSerializableException:trycatch中的ObjectA 有什么想法吗?
答案 0 :(得分:3)
您的ObjectA
必须实施java.io.Serializable界面。
public ObjectA implements Serializable {
}
但这不是唯一有效的方法。
实施java.io.Externalizable也是有效的。区别在于java.io.Serializable
被称为标记接口(例如,接口不提供实现方法),而java.io.Externalizable
强制您实现两个方法,因此提供了实现自定义序列化机制的必要手段。
public class ObjectA implements Externalizable {
@Override
public void writeExternal(ObjectOutput out) { ... }
@Override
public void readExternal(ObjectInput in) { ... }
}