2016-06-30 2 views
0

"Checker"가 클래스 인 두 개의 다른 패키지 "mas.back.task.Checker"와 "mas.front.task.Checker"가 있는데, 클래스를 전송했습니다. bytebuffer의 serialization을 사용하여 클라이언트 소켓에서 서버 소켓으로 성공적으로 직렬화되었지만 "mas.front.task.Checker"에서 "mas.back.task.Checker"로 변환 할 때 작동하지 않으며 여기에 오류 메시지가 표시됩니다.자바 객체를 다른 패키지 소스에서 캐스팅 할 수 없습니다.

Exception in thread "pool-1-thread-2" java.lang.ClassCastException: mas.front.task.Checker cannot be cast to mas.back.task.Checker 

여기에 서버 소켓에 클라이언트 소켓을 통해 클래스를 보내는 코드 :

public static final Object convertByteToObject(byte[] bytes) { 
    ObjectInput in; 
    try { 
     ByteArrayInputStream bis = new ByteArrayInputStream(bytes); 
     in = new ObjectInputStream(bis); 
     return in.readObject(); 
    } catch (IOException | ClassNotFoundException ex) { 
     Logger.getLogger(Converter.class.getName()).log(Level.SEVERE, null, ex); 
     return null; 
    } 
} 

public static final byte[] convertObjectToByte(Object object) { 
    try { 
     ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
     ObjectOutput out = new ObjectOutputStream(bos); 
     out.writeObject(object); 
     return bos.toByteArray(); 
    } catch (IOException ex) { 
     Logger.getLogger(Converter.class.getName()).log(Level.SEVERE, null, ex); 
     return null; 
    } 
} 

Checker 클래스의 모든 필드가 동일하고 "Checker checker = new Checker()"를 시도했지만 "checker = (Checker) object"일 때 오류가 위의 메시지로 표시되므로 어떻게 해결할 수 있습니까? 이 문제?

비고 :

public class Checker implements Serializable { 
    public String JobID; 
    public String JobUserID; 
    public int JobInterval; 
    public String JobStatus; 
} 

답변

2

Checker 클래스가 다른 패키지에 속하는 경우가 다르다. 클래스에 정의 된 필드 나 메서드의 측면에서 모두 동일하다는 것을 확인하는 것은 중요하지 않습니다. 서로 다른 패키지 계층 구조를 가지므로 동일하지 않습니다. 인스턴스를 직렬화하거나 직렬화를 해제하지 않고도이 문제를 쉽게 재현 할 수 있습니다.Checker 유형의 변수를 하나의 패키지에서 선언하고 다른 변수에 캐스팅하십시오.

back.task의 하위 패키지로 가져올 수있는 패키지 계층 구조에서 상위 패키지로 Checker을 추출하지 않는 이유는 무엇입니까?

+0

이유는 TCP/IP 소켓을 통해 직렬화 또는 직렬화 해제를 통해 클래스를 전송하는 것이므로 프론트 엔드 클라이언트는 mas.front.task.XXX이고 백엔드는 클래스에 대해 mas.back.task.XXX입니다. 위의 제안이 있습니까? –

+0

두 번째 이유는 Checker 유형뿐만 아니라 다른 유형의 Checker 유형도 전송해야합니다. –

+0

Checker 클래스를 작성 했습니까? –

관련 문제