gpt4 book ai didi

java - 使用 ObjectOutputStream 将一系列对象写入 .ser 文件并读回的最佳方法

转载 作者:太空宇宙 更新时间:2023-11-04 07:14:29 25 4
gpt4 key购买 nike

我从学生类中创建了一系列对象并将它们存储在 vector 中。每个对象创建后我都会将其写入 .ser 文件中。然后我把它们读回来。我的代码运行完美。我想知道的是,我这样做的方式是正确的还是有任何简单且优化的方法可以完成此任务?以及如何替换或删除 .ser 文件中的特定对象,而无需再次重新编写整个文件。

学生类(class)

public class Student implements Comparable<Student>, Serializable{

private String firstName = "";
private int registrationNumber;
private int coursework1;
private int coursework2;
private int finalExam;
private double moduleMark;

public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public int getRegistrationNumber() {
return registrationNumber;
}
public void setRegistrationNumber(int registrationNumber) {
this.registrationNumber = registrationNumber;
}
public int getCoursework1() {
return coursework1;
}
public void setCoursework1(int coursework1) {
this.coursework1 = coursework1;
}
public int getCoursework2() {
return coursework2;
}
public void setCoursework2(int coursework2) {
this.coursework2 = coursework2;
}
public int getFinalExam() {
return finalExam;
}
public void setFinalExam(int finalExam) {
this.finalExam = finalExam;
}
public double getModuleMark() {
return moduleMark;
}
public void setModuleMark(double moduleMark) {
this.moduleMark = moduleMark;
}
public int compareTo(Student s){
if (this.moduleMark > s.moduleMark)
return 1;
else if (this.moduleMark == s.moduleMark)
return 0;
else
return -1;
}
}

文件写入部分

public static void Write(Student mm){
try
{
FileOutputStream fileOut = new FileOutputStream("info.ser",true);
ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(fileOut));

out.writeObject(mm);
out.close();
fileOut.close();
System.out.println("Serialized data is saved in info.ser");
}catch(IOException i)
{
//i.printStackTrace();
}

}

阅读部分

public static int Read() {
int count=0;
try{
vector = new Vector<Student>();
FileInputStream saveFile = new FileInputStream("info.ser");
ObjectInputStream save;
try{
for(;;){
save = new ObjectInputStream(saveFile);
student = (Student) save.readObject();
vector.add(student);
count++;
}
}catch(EOFException e){
//e.printStackTrace();
}
saveFile.close();

}catch(Exception exc){
exc.printStackTrace();
}
return count;
}

最佳答案

如果不重写整个文件,就无法删除 Student 对象。原因是,如果您尝试附加更多 Student 对象,则会损坏 header 。因此,当您读回对象时,您将得到一个StreamCorruptedException

因此,您必须读回对象,删除所需的对象,删除旧文件并写入新文件。

关于java - 使用 ObjectOutputStream 将一系列对象写入 .ser 文件并读回的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20162154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com