마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

ㅠㅠ..객체직렬화해서 바이트배열로 뽑은다음 전송하는도중 의문이생겻습니다.

0 추천

서버는 C# 비동기 서버구요

클라이언트는 안드로이드[자바]에요

 

public static byte[] toByteArray (Object obj)
{
 byte[] bytes = null;
 ByteArrayOutputStream bos = new ByteArrayOutputStream();
 try {
   ObjectOutputStream oos = new ObjectOutputStream(bos); 
   oos.writeObject(obj);
   oos.flush(); 
   oos.close(); 
   bos.close();
   bytes = bos.toByteArray ();
 }
 catch (IOException ex) {
   ex.printStackTrace();
 }
 return bytes;
}
위 코드를 사용하여 
 
@SuppressWarnings("serial")
public class TEMP_2 implements Serializable{
public byte Header1=1;
}
TEMP_2라는 객체를 직렬화시켯습니다
그리고 C#서버로전달했는데요
 
C#서버에서캡쳐된 패킷값을보면
 
byte[0] = 172
byte[1] =237
byte[2] =0
byte[3] =5
byte[4] =115
byte[5] =114
byte[6] =0
byte[7] =28
byte[8] =99
byte[9] =111
byte[10] =109
byte[11]=49
byte[12] =101
byte[13] =120
byte[14] =97
 
,....하다가 [59]번째 배열에 자바에서 보낸 Header1 값이 있습니다.
그런데정말 햇갈리고 어이없는게
59번째 전에있는 데이터들은 무었인가요
 
 
TEMP_2  클래스에 변수가 추가 되면
진짜 값이 있기전까지의 배열이 더길어지더라구요
그니까 변수 1개일땐 59번째배열부터 값이있고
변수2개일땐 63번쨰부터 값이있더랍니다..
 
 
저는 그냥 변수에대한 배열값만오면좋겟는데..정말아리송하네요
 
 

 

Ant.꿈달 (210 포인트) 님이 2013년 8월 17일 질문

2개의 답변

+1 추천
 
채택된 답변
잘못알고있는 걸수도 있지만, 직렬화가 자바에서 지원하는 기능이라 다른 언어로 넘겨주면 제대로 못읽을 수 밖에 없습니다.

직렬화가 자바객체를 byte로 저장했다가 다시 복원할 수 있는 기능인데, byte로 저장할 때 예시처럼 된 직렬화 클래스를 byte로 바꾸면 안에 있는 변수만 byte로 바뀌는게 아니라 객체에 대한 다른 데이터도 byte로 바뀌는 걸로 알고 있습니다. 그래서 직렬화 된 데이터로 통신하면 많은 byte이동이 발생되어 거의 쓰이지 않고 있구요.

따라서 말씀하진 59번째 앞에 있는 배열들은 직렬화 객체에 대한 정보일듯 합니다.
congbab (5,140 포인트) 님이 2013년 8월 17일 답변
Ant.꿈달님이 2013년 8월 20일 채택됨
감사합니다 ㅠ-ㅠ 직렬화보단 마샬링쪽이나 아니면 제가직접 자료들을 byte배열로 뽑아내는 클래스를 만들어내서 사용해야겟더라구요
자바가 C#과 비슷하다고해서 책없이 바로 안드로이드게임개발을 시작햇는데.. 책한권사야겟어요
달라도 너무다르네요 ㅠ-ㅠ..
0 추천

TEMP_2  클래스의 슈퍼 클래스에 대한 정보들이 아닐까요?

 

Elex (9,090 포인트) 님이 2013년 8월 17일 답변
그런거 같아요 ㅠ-ㅠ 항상 용량이바뀌니까 캐치를 못하겟어요
...