Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数据传输JAVA->;C#-澄清?_Java_C#_Tcp Ip - Fatal编程技术网

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

数据传输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

我正在构建一个android应用程序(使用Java1.6)——它是实际的客户端

它向windows计算机发送和接收数据,windows计算机承载使用
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];
        }