2010-04-13 4 views
2

Hashtable의 직렬화에 이상한 문제가 있습니다. 서버, 클라이언트 응용 프로그램을 만들었습니다. 서버 (PC/MAC)가 Hashtable을 직렬화하고 그것을 UDP를 통해 클라이언트 (Android)로 보내는 곳. 데이터는 정확하게 보내지고 읽혀 지지만 LogCat에서 아래에이 메시지들을 얻습니다.Android Hashtable Serialization

11월 4일부터 12일까지 : 19 : 43.059 : DEBUG/dalvikvm (407) : GetFieldID : 필드 Ljava/폴더의 유틸리티/해시 테이블을 찾을 수 없습니다; .loadFactor :

때때로 F

, 나는이

을 볼 것이다 04-12 11 : 21 : 19.150 : DEBUG/dalvikvm (407) : GC가 9714 초당 10814 개체/447184 바이트를 해제했습니다.

앱이 2-3 분 동안 실행 된 다음 충돌합니다. 충분히 흥미롭게도 SDK 1.5에 Loadfactor 오류가 표시되지 않습니다. 하지만 자주 GC 무료 xxxx 개체를, 조용한 자주 볼 수 있습니다.

ByteArrayInputStream bis = new ByteArrayInputStream(bytes);   
ObjectInputStream ois = new ObjectInputStream(bis);    
object = ois.readObject(); 

코드에 : 나는 문제가 드 직렬화 및 오류/경고 것으로 나타났습니다 디버깅 후

코드 다음 코드에서 오는

object = ois.readObject(); 
클라이언트의

. 내 서버에서 코드를 serialize하는 것은 다음과 같습니다.

번호 : 무슨 일이 일어나고 있는지

ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
ObjectOutputStream oos = new ObjectOutputStream(bos);    
oos.writeObject(obj);  

어떤 생각?

감사합니다.

답변

1

아키텍처간에 직렬화를 사용하지 마십시오. 직렬화 된 Dalvik VM 오브젝트 트리가 JavaSE/JavaEE 환경과 호환되는 형식이어야한다는 보장은 없습니다. 아키텍처간에 구조화 된 데이터를 전송하는 데 XML, JSON, 프로토콜 버퍼, 쓰레드 등을 사용하십시오.

0

는 너무나 늦었지만 다른 사람을 위해 사람이 건너 온다 :

나는 trove libraries을 사용하여이 극복 :

은 (당신이 경고되지 않은 말하지 말라) 이상했다 commonsware 것을 주목 및 긴 객체 맵 사용 dalvik 또는 Java가 직렬화를 변경하면 채워질 수 있지만 직렬화가 대안보다 훨씬 쉽고 오류 메시지 (양성 있음)가 많은 불필요한 할당 및 오버 헤드를 의미한다는 것을 알고 있습니다. 이보다 나는 proguard를 사용하여 필자가 필요로하는 45K (~ 1M)의 라이브러리를 줄입니다. 시리얼 코드가 변경된 경우에 대비하여 소스 코드 복사본을 보관하고 3.0.0 rc1을 사용하여 버전이 제대로 작동하는지 확인할 필요가 있음을 알려드립니다.