我创建了一个用于与另一个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