嘿,所以我不熟悉序列化,至少是我们教授希望我们采用的方式。我有一个问题,由于某种原因,即使实现了java.io.Serializable也不会序列化。我尝试了直接路径,“可序列化”均无效。我不确定发生了什么问题,或者据我所知为什么不应该执行任何需要纠正的方法?
我得到的错误
java.io.NotSerializableException: Transaction
at java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1185)
at java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:349)
at Transactionmanager.serialize(Transactionmanager.java:81)
at Test3.main(Test3.java:62)
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: Transaction
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1598)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:430)
at Transactionmanager.deSerialize(Transactionmanager.java:96)
at Test3.main(Test3.java:67)
Caused by: java.io.NotSerializableException: Transaction
at java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1185)
at java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:349)
at Transactionmanager.serialize(Transactionmanager.java:81)
at Test3.main(Test3.java:62)
代码
import java.awt.print.Book;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
public class Transactionmanager implements Serializable {
private ArrayList<Transaction> col;
public Transactionmanager() {
col = new ArrayList<Transaction>();
}
public void add(Transaction obj) {
col.add(obj);
}
public void clear() {
col.clear();
}
public int getcount() {
return col.size();
}
public ArrayList<Transaction> getall() {
ArrayList<Transaction> temp = col;
Collections.sort(temp,new Comparator<Transaction>() {
public int compare(Transaction s1,Transaction s2) {
return ((Integer) s1.getId()).compareTo(s2.getId());
}
});
return temp;
}
public ArrayList<Transaction> findBuyer(String name) {
ArrayList<Transaction> temp = new ArrayList<>();
for (int i = 0; i < col.size(); i++) {
if (col.get(i).getBuyer().equals(name)) {
temp.add(col.get(i));
}
}
Collections.sort(temp,Transaction s2) {
return ((Integer) s1.getId()).compareTo(s2.getId());
}
});
return temp;
}
public ArrayList<Transaction> findSeller(String name) {
ArrayList<Transaction> temp = new ArrayList<>();
for (int i = 0; i < col.size(); i++) {
if (col.get(i).getSeller().equals(name)) {
temp.add(col.get(i));
}
}
Collections.sort(temp,Transaction s2) {
return ((Integer) s1.getId()).compareTo(s2.getId());
}
});
return temp;
}
public Transaction findId(int ID) {
for (int i = 0; i < col.size(); i++) {
if (col.get(i).getId() == ID) {
return col.get(i);
}
}
return null;
}
public void serialize() throws IOException {
FileOutputStream output = new FileOutputStream(new File("savePerson.ser"));
ObjectOutputStream outputStream = new ObjectOutputStream(output);
for (int i = 0; i < col.size(); i++) {
outputStream.writeObject(col.get(i));
}
output.close();
outputStream.close();
}
public void deSerialize() throws IOException,ClassnotFoundException {
FileInputStream inputStream = new FileInputStream(new File("savePerson.ser"));
boolean cont = true;
try {
ObjectInputStream ois = new ObjectInputStream(inputStream);
while (cont) {
Transaction obj = null;
try {
obj = (Transaction) ois.readObject();
} catch (ClassnotFoundException e) {
e.printStackTrace();
}
if (obj != null)
col.add(obj);
else
cont = false;
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
inputStream.close();
}
}
}