文件输入和输出序列化

时间:2015-04-28 17:05:12

标签: serialization

我只是希望有人对此代码发表评论,让我了解代码正在做什么,它是完美的,但我不明白。我知道这个网站有专业的程序员,到目前为止我不知道如何调试。

请通过评论来让我逐步了解它的作用。

import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

public class Serialization {
public static void main(String[] args) throws FileNotFoundException, IOException,ClassNotFoundException {
    File file = new File("students.txt");
    ArrayList<Student> psy101 = new ArrayList<Student>();

    psy101.add (new Student("Bob", 2.9));
    psy101.add(new Student("Smith", 3.9));
    psy101.add(new Student("John",4.9));
    psy101.add(new Student("Amy",10.9));


    FileOutputStream fo = new FileOutputStream(file);
    ObjectOutputStream output = new ObjectOutputStream(fo);

    for(Student s : psy101){
    output.writeObject(s);


}
output.close();
fo.close();


FileInputStream fi = new FileInputStream(file);
ObjectInputStream input = new ObjectInputStream(fi);
ArrayList<Student> psy1012 = new ArrayList<Student>();
try{
while (true){
    Student s = (Student)input.readObject();
     psy1012.add(s);
}
}catch (EOFException ex){

}
for (Student s : psy1012){
    System.out.println(s);
}

而另一个类是这一个,任何类型的评论将不胜感激。

import java.io.Serializable;

public class Student implements Serializable {
private String Name;
private double GPA;

public Student(String name, double gpa){
    this.Name = name;
    this.GPA = gpa;

}

public String getName() {
    return this.Name;
}

public String getName(String newName) {
    return(this.Name = newName);
}

public double getGPA() {
    return this.GPA;
}

public double setGPA(double newgGPA) {
    return (this.GPA = GPA);
}
@Override
    public String toString() {
        // TODO Auto-generated method stub
        return String.format("%s\t%f",this.Name,this.GPA);
    }
}

1 个答案:

答案 0 :(得分:0)

首先,我可以看到你有两个班级,

第一个用于序列化的类,第二个用于学生。 现在我无法逐行评论,但我会提供一些信息,以便您可以阅读更多内容。

https://docs.oracle.com/javase/tutorial/essential/io/

写入文本文件

要将文本写入文件,请使用FileWriter类打开输出流。如果文件不存在,则会创建具有此名称的新空文件。如果文件已存在,则会删除文件中的数据。如果要附加到文件,请在创建FileWriter对象时使用以下选项:

FileWriter fWriter = new FileWriter(outFile,true); PrintWriter类有方法print(),printf()和println(),它们允许我们写入文件。

这也会对你有所帮助。 http://www.cs.utexas.edu/~mitra/csSummer2009/cs303/lectures/fileIO.html

现在我相信一旦你运行你的代码,你会注意到students.txt将在你的代码和控制台中有信息,但是它将被序列化,Java提供了一种机制,称为对象序列化,其中一个对象可以表示为包含对象数据的字节序列,以及有关对象类型和对象中存储的数据类型的信息。

将序列化对象写入文件后,可以从文件中读取并反序列化,即表示对象及其数据的类型信息和字节可用于在内存中重新创建对象。

最令人印象深刻的是整个过程独立于JVM,这意味着可以在一个平台上对对象进行序列化,并在完全不同的平台上进行反序列化。所以请阅读以上内容,这应该有所帮助。