数据传输JAVA - > C# - 澄清?

时间:2014-11-06 08:01:58

标签: java c# tcp-ip

我正在构建一个Android应用程序(使用java 1.6) - 这是实际的客户端

它向托管计算机发送和接收数据,该计算机承载使用networkStreamsocket TCP/IP的.net应用程序。

发送的数据是bytes(显然 - 都是字节)但java客户端转换为字节的类型是:

intsGuidsstring(字节通过utf 8编码)。

问题

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

例如:如果我在java端发送4个字节 - 我可以在C#端获得int:

 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,DateTimes等......?

我在原始方面是否安全?

1 个答案:

答案 0 :(得分: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都有构造函数,可以让你很容易地在类型之间进行转换。