当通过套接字从Java应用程序向C#应用程序发送信息时,字节顺序是否不同?或者我可以只是从C#向Java应用程序发送一个整数并将其读取为整数吗?
(操作系统是否有影响,还是无论实际操作系统如何处理它,Java/.NET都是相同的?)
(操作系统是否有影响,还是无论实际操作系统如何处理它,Java/.NET都是相同的?)
BitConverter
类是不安全的-通常被错误地认为是小端,但在某些平台上(特别是在某些硬件上的Mono中)它可能是大端;因此有.IsLittleEndian
属性。DataInputStream
或DataOutputStream
,如文档所述:http://download.oracle.com/javase/6/docs/api/java/io/DataOutputStream.html#writeInt%28int%29。您应该查看相应的C#文档以了解它的作用(或者也许这里有人可以告诉您)。ByteBuffer
:http://download.oracle.com/javase/6/docs/api/java/nio/ByteBuffer.html,它具有“order”方法,允许您为读取多字节原始类型的操作指定字节顺序。Java在一些库(如DataInput/OutputStream)中使用大端字节序。IP协议都使用大端字节序,这可能会导致人们将大端字节序作为网络协议的默认设置。
然而,NIO和ByteBuffer允许您指定BigEndian、LittleEndian或NativeEndian(系统默认使用的字节序)
x86系统倾向于使用小端字节序,因此许多Microsoft/Linux应用程序默认使用小端字节序,但可以支持大端字节序。
是的,字节顺序可能会不同。C# 假定小端序 可能会使用平台的字节顺序,而Java则倾向于使用大端序。这在SO上曾经讨论过。例如,请参见C# little endian or big endian?
BitConverter
),但它们使用平台的字节序,这在某些平台上可能是不同的。 - Marc Gravell