다른 Delphi 응용 프로그램과 통신 할 수있는 Android 응용 프로그램을 만들었습니다. 델파이 애플리케이션이 받아들이는 데이터는 합집합입니다. UDP를 사용하여 클래스를 작성하도록 정의한 유형을 전송합니다. 그러나 델파이 애플리케이션이받는 데이터는 잘못 해석됩니다. 그래서 자바에서 유니온 타입을 구현하는 메소드가 있는지 알고 싶습니다. 나는 이미 이걸 http://lambda-the-ultimate.org/node/2694로 보았지만, 그 수업에서 그가 무엇을하는지 이해하지 못합니다.Union을 사용하는 Delphi 응용 프로그램과 Android 응용 프로그램 간의 통신
편집 : 죄송 합니다만, 델파이 응용 프로그램이 다른 프로그래머에 의해 작성 되었기 때문에 제 코드가 있습니다. 그러나 나는 문제를 해결했다. 다음
ByteArrayOutputStream baos=new ByteArrayOutputStream();
DataOutputStream dos=new DataOutputStream(baos);
try{
dos.writeLong(Double.doubleToRawLongBits(x));
dos.flush();
px=baos.toByteArray();
baos.reset();
dos.writeLong(Double.doubleToRawLongBits(y));
dos.flush();
py=baos.toByteArray();
baos.reset();
dos.writeLong(Double.doubleToRawLongBits(z));
dos.flush();
pz=baos.toByteArray();
baos.reset();
dos.writeLong(Double.doubleToRawLongBits(a));
dos.flush();
ga=baos.toByteArray();
baos.reset();
dos.writeLong(Double.doubleToRawLongBits(b));
dos.flush();
gb=baos.toByteArray();
baos.reset();
dos.writeLong(Double.doubleToRawLongBits(c));
dos.flush();
gc=baos.toByteArray();
baos.reset();
}catch(Exception e){}
내가 이들과 같은 cicles에 대한 몇 가지와 순서를 거꾸로 한 : 나는 큰 엔디안 그들은을 전송하는 동안 델파이 응용 프로그램은 바이트 그래서 이후 이런 식으로 스트림 데이터를 직렬화, 리틀 엔디안으로 정렬 구함 :
ByteBuffer bb = ByteBuffer.allocate(48);
//bb.order(ByteOrder.LITTLE_ENDIAN);
for(int i=7;i>=0;i--)
bb.put(messaggio.getPx()[i]);
for(int i=7;i>=0;i--)
bb.put(messaggio.getPy()[i]);
for(int i=7;i>=0;i--)
bb.put(messaggio.getPz()[i]);
for(int i=7;i>=0;i--)
bb.put(messaggio.getGa()[i]);
for(int i=7;i>=0;i--)
bb.put(messaggio.getGb()[i]);
for(int i=7;i>=0;i--)
bb.put(messaggio.getGc()[i]);
byte[] messbyte=bb.array();
당신은 너무에 messaggio.getPx 및 참조 초기 아이디어는 내 클래스의 전송 대상이었다,하지만 난 Wireshark를 통해 볼 수 있기 때문에 그 그와 함께 직렬화 객체 리드 패키지의 이름과 같은 몇 가지 정보를 제공합니다. 그래서 48 바이트의 바이트 벡터를 전송하기로 결정했습니다 (6 개의 이중 필드였습니다). 나는이 필드를 getPx(), getPy(), ...., 메소드를 통해 선택한다. 하지만 아직 서버에 다른 문제가 있습니다. 그러나 이러한 문제들에 대해서는 델파이 프로그래머와 이야기 할 것입니다.
Java 클래스의 데이터를 어떻게 직렬화합니까? – Robert
몇 가지 세부 정보를 제공 할 수 있습니까? 코드가 없으며 데이터 형식에 대한 설명이없고 시스템 오류에 대한 설명도 없습니다. 이것 없이는 문제를 해결하기가 대단히 어렵습니다. –
"유니언"또는 "유니 코드"입니까? – mjn