私は今、Java
言語を使用してシリアル化を行う方法を学んでいます。この件に関するいくつかの投稿とドキュメントを読み、簡単な例を試してみました(以下)
public class SterializeObject implements java.io.Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private String name;
private transient int code;
public SterializeObject (String n, int c){
name = n;
code = c;
}
public void printAtributes (){
System.out.println("name: " + name + "; code: " + code);
}
}
public class MainClass {
public static void main(String[] agrs) {
SterializeObject ob1 = new SterializeObject("ana", 1);
SterializeObject ob2 = new SterializeObject("rita", 2);
try {
FileOutputStream fileOut = new FileOutputStream("file.data");
ObjectOutputStream outObj = new ObjectOutputStream(fileOut);
outObj.writeObject(ob1);
outObj.writeObject(ob2);
outObj.close();
System.out.println("Objects were serialized!");
} catch (IOException e) {
e.printStackTrace();
}
ArrayList<SterializeObject> list = new ArrayList<SterializeObject>();
try {
FileInputStream fileInput = new FileInputStream("file.data");
ObjectInputStream inputObj = new ObjectInputStream(fileInput);
Object o;
try {
while ((o = inputObj.readObject()) != null) {
list.add((SterializeObject) o);
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("Erro foi aqui! (1)");
}
inputObj.close();
fileInput.close();
} catch (IOException e) {
e.printStackTrace();
System.out.println("Erro foi aqui! (2)");
}
for (int i = 0; i < list.size(); ++i) {
list.get(i).printAtributes();
}
}
}
2 つの変数(名前) と一時的な (コード) をClass SterializeObject
持つを作成しました。次に、主にそのクラスの2つのインスタンスを生成し、それをファイルに書き込もうとしましたが、成功しました! その後、ループで2つのオブジェクトを読み取ろうとします..私の問題があります..終了しているかどうかを確認するための何らかの方法がないためです。だから、私はこの条件でやろうとしました: .implements java.io.Serializable
string
int
ObjectInputStream
(o = inputObj.readObject()) != null
My output is this:
java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at MainClass.main(MainClass.java:30)
Objects were serialized!
Erro foi aqui! (2)
name: ana; code: 0
name: rita; code: 0
オブジェクトは取得できますが、存在しないものにアクセスしようとしていると思われるため、エラーが発生します。
誰かがそれを行う他の方法を教えてもらえますか?
よろしくお願いします。