0

我从Student类创建一系列对象并将它们存储在一个向量中。我将每个对象写入一个.ser文件一旦创建。然后我读回来。我的代码工作完美。我想知道的是,我这样做的方式是正确的,还是有任何简单和优化的方法来完成这项工作?还有如何替换或删除.ser文件中的特定对象,而无需再次重新读取整个文件。使用ObjectOutputStream将一系列对象写入.ser文件并将其读回的最佳方法

学生班级

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; 
    } 
+0

此网站不适用于工作代码。您应该将此问题发布到codereview.stackexchange.com。 –

回答

1

有没有办法删除Student对象而无需重写整个文件。原因是如果你尝试添加更多的Student对象,你将损坏头文件。因此,当你读回对象时,你会得到一个StreamCorruptedException

所以你将不得不读回对象,删除所需的对象,删除旧文件,并写一个新的。

+0

啊,就是这样..用这种类型的序列化和反序列化方法是好还是不好的练习? – Eclayaz

+1

我没有看到将对象写入文件的问题。 Vector本身就是Serializable,所以你可以在一个方法调用中将Vector写入文件。逐个写入对象将导致流被破坏 –

相关问题