我創建了一個用於與另一個Delphi應用程序通信的Android應用程序。 delphi應用程序接受的數據是union。我用UDP發送一個我定義創建我的類的類型。但delphi應用程序收到的數據不正確的解釋。所以我想知道是否存在一個在java中實現聯合類型的方法。 我已經看過這個http://lambda-the-ultimate.org/node/2694,但我不明白他在那個班上做了什麼。Delphi應用程序和使用Union的Android應用程序之間的通信
編輯:對不起,但我只有我的代碼,因爲delphi應用程序是由另一個程序員創建的。不過,我已經解決了這個問題。德爾福申請通緝字節的小端排序,而我給他們大端,所以以這種方式流後,序列化數據:
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){}
的話,我都倒了一些對圈子中,因爲這些順序:
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字節的字節向量(是六個雙字段)。我通過getPx(),getPy(),...方法選擇此字段。 但服務器還有其他問題。但對於這些問題,我會與delphi程序員談談。
你如何序列化你的Java類的數據? – Robert
你能提供一些更多的細節。沒有代碼,沒有數據格式的描述,也沒有描述系統如何失敗。沒有這個問題非常難以解決。 –
它是「聯盟」還是「Unicode」? – mjn