2017-10-29 3 views
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입니다.

답변

0
emp1.writeExternal(oos); 
emp4.writeExternal(oos); 

잘못하고 있습니다. 이 있어야한다 : 마찬가지로

oos.writeObject(emp1); 
oos.writeObject(emp4); 

emp2.readExternal(ois); 
emp3.readExternal(ois); 

emp2 = (Employee)ois.readObject(); 
emp3 = (Employee)ois.readObject(); 

당신이 그것을 가지고있는 방법이어야한다, 당신은 당신의 자신의 잘못, 메소드를 호출하고 있습니다 :에서 직렬화를하고 있지 모든.