我正在构建一个Android应用程序(使用java 1.6) - 这是实际的客户端
它向托管计算机发送和接收数据,该计算机承载使用networkStream
和socket TCP/IP
的.net应用程序。
发送的数据是bytes
(显然 - 都是字节)但java客户端转换为字节的类型是:
ints
,Guids
,string
(字节通过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等......?
我在原始方面是否安全?
答案 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都有构造函数,可以让你很容易地在类型之间进行转换。