2014-11-06 24 views
0

我建立一个机器人应用(与Java 1.6) - 这是实际的客户端数据传输JAVA - > C# - 澄清?

它发送和接收数据到它承载其使用networkStreamsocket TCP/IP .NET应用程序的Windows机器。

其被发送的数据是bytes(显然 - 所有是字节),但Java客户端转换为字节的类型有:

intsGuidsstring(字节是通过UTF-8编码)。

问题

我相信,原始类型可以安全地 - 在.NET端解码。

例如:如果我在Java端发送4个字节 - 我能得到INT早在C#中端:

public static int ConvertBytesToInt(byte[] LengthValueBytes) 
     { 
      var bitArray = new BitArray(LengthValueBytes); 
      if (bitArray.Length > 32) 
      throw new ArgumentException("Argument length shall be at most 32 bits."); 
      int[] array = new int[1]; 
      bitArray.CopyTo(array, 0); 
      return array[0]; 
     } 

而且串:

Encoding.UTF8.GetString(...bytes....)

但怎么样更复杂的类型? GUID,日期时间等...?

我只在原始的一边安全吗?

+1

定义“安全”。你想在这里解决什么具体问题?你显然不能在.NET代码中重构纯Java类型,反之亦然,所以当然,你可以完成什么是有限的。但是你可以通过编写一些代码来明确解释你收到的字节。 – 2014-11-06 08:06:19

+0

@PeterDuniho我没想到在.net端有序列化的'person'类被反序列化。我只是问什么类型,我是完全安全的(诠释,正如我所说,字符串,因为我也说过) - 简而言之,我只在原始类型安全吗? – 2014-11-06 08:07:42

+0

您将需要将所有内容转换为字节。 Java如何保存日期时间可能与.NET如何保存日期不兼容。如果你通过了毫秒或者一个字节流式传输,那么这应该起作用。 – 2014-11-06 08:07:49

回答

2

你应该很小心,因为你可以通过如字节顺序,字的大小,不同的内部表示,等

你可能要考虑使用标准化交换格式,如JSON,BSON问题被逮住,XML或ASN1.1。 .NET和Java有所有这些格式的类或库,它们可以帮助你避免所有常见的陷阱。

如果您决定自己做,应该是可行的。

.NET中的BitConverter帮助您避免排序问题。 Java总是处于网络字节顺序(big-endian)。

日期和时间有不同的内部表示。将它作为RFC1123格式的字符串(或类似字符)传输可能会更容易一些。 .NET中的DateTime具有Tick(100纳秒)的内部单位。 Java中的日期使用1毫秒作为其内部单位。

java.util.UUID和System.Guid都有构造函数,它们可以让你很容易地在类型之间进行转换。

+0

我想我会去学习protobuf – 2014-11-06 08:52:53