0
externalizable 인터페이스에서 탐색 중입니다. 내가 읽은 것보다 직렬화 된 파일에 더 많은 속성을 썼을 때 나는 이상한 행동을 발견했다. 아래는 내 직원 클래스입니다. ID가 할당 방법external 쓰기가 외부 읽기보다 더 많은 속성을 가질 때 외부 인터페이스의 동작이
java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.readByte(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.readUTFChar(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.readUTFBody(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.readUTF(Unknown Source)
at java.io.ObjectInputStream.readUTF(Unknown Source)
at serialization.externalize.Employee.readExternal(Employee.java:40)
at serialization.externalize.ExternalizeTest2.main(ExternalizeTest2.java:32)
After externalization:
Employee [id=1, name=Swet, isTempEmp=false]
Employee [id=16777216, name=Test2, isTempEmp=false]
확실하지 :
public class Employee implements Externalizable {
private int id;
private String name;
private Boolean isTempEmp;
public Employee(int id, String name, Boolean isTempEmp) {
super();
this.id = id;
this.name = name;
this.isTempEmp = isTempEmp;
}
@Override
public String toString() {
return "Employee [id=" + id + ", name=" + name + ", isTempEmp=" + isTempEmp + "]";
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeInt(id);
out.writeUTF(name);
out.writeBoolean(isTempEmp);
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
this.id=in.readInt();
this.name=in.readUTF();
//this.isTempEmp=in.readBoolean();
}
}
그리고 아래는 내가 무엇입니까 출력 파일 아래
public class ExternalizeTest2 {
public static void main(String[] args) {
Employee emp1=new Employee(1, "Swet", true);
Employee emp4=new Employee(2, "Varun", true);
try(OutputStream os=new FileOutputStream("Employee.txt");
ObjectOutputStream oos=new ObjectOutputStream(os);) {
emp1.writeExternal(oos);
emp4.writeExternal(oos);
}catch (Exception e) {
e.printStackTrace();
}
Employee emp2=new Employee(3, "Test1", false);
Employee emp3=new Employee(4, "Test2", false);
try(InputStream is=new FileInputStream("Employee.txt");
ObjectInputStream ois=new ObjectInputStream(is);) {
emp2.readExternal(ois);
emp3.readExternal(ois);
}catch (Exception e) {
e.printStackTrace();
}
System.out.println("After externalization: \n"+emp2.toString());
System.out.println(emp3.toString());
}
}
에서 파일에 직원 오브젝트를 외부화 읽기에 대한 내 수업입니다 to emp3은 16777216입니다.