数据传输JAVA->;C#-澄清?
我正在构建一个android应用程序(使用Java1.6)——它是实际的客户端 它向windows计算机发送和接收数据,windows计算机承载使用数据传输JAVA->;C#-澄清?,java,c#,tcp-ip,Java,C#,Tcp Ip,我正在构建一个android应用程序(使用Java1.6)——它是实际的客户端 它向windows计算机发送和接收数据,windows计算机承载使用networkStream和socket TCP/IP的.net应用程序 发送的数据是字节(显然,所有数据都是字节),但java客户端转换为字节的类型是: ints,guid,string(字节通过utf 8编码) 问题 我相信基本类型可以在.net端安全地进行解码 例如:如果我在java端发送4个字节,我可以在C端返回int: 还有字符串: Enc
networkStream
和socket TCP/IP
的.net应用程序
发送的数据是字节
(显然,所有数据都是字节),但java客户端转换为字节的类型是:
ints
,guid
,string
(字节通过utf 8编码)
问题
我相信基本类型可以在.net端安全地进行解码
例如:如果我在java端发送4个字节,我可以在C端返回int:
还有字符串:
Encoding.UTF8.GetString(…字节…)
但是更复杂的类型呢?GUID、日期时间等
我只在原语方面安全吗?您应该非常小心,因为您可能会遇到诸如字节顺序、字长、不同的内部表示等问题
您可能需要考虑使用标准化的交换格式,如JSON、BSON、XML或ASN1.1。NET和Java为所有这些格式提供了类或库,这将帮助您避免所有常见的陷阱
如果你决心自己去做,那应该是可行的 NET中的位转换器可帮助您避免端性问题。Java总是按网络字节顺序(大端) 日期和时间具有不同的内部表示形式。将其作为RFC1123格式(或类似格式)的字符串传输可能更容易。NET中的DateTime的内部单位为滴答(100纳秒)。Java中的日期使用1毫秒作为内部单位java.util.UUID和System.Guid都有构造函数,可以让您相当轻松地在类型之间进行转换。定义“安全”。你想在这里解决什么具体问题?显然,您无法在.NET代码中重建仅Java的类型,反之亦然,因此您所能完成的工作当然是有限的。但是您可以编写一些代码来显式解释接收到的字节。@PeterDuniho我不希望在.net端对序列化的
person
类进行反序列化。我只是问哪些类型我是完全安全的(我说过int,我也说过string)——简言之,我只在基本类型中是安全的吗?你需要把所有的东西都转换成字节。Java保存日期时间的方式可能与.NET保存日期的方式不兼容。如果你通过millseconds或流式传输的某个字节,那么这应该是有效的。@ScaryWombat那么它只对原语合法吗?(布尔呢)?我听说java优化了他保存bools的方式。。。。(我对java不太熟悉)
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];
}