使用tcp从java发送到C#的两倍

Ora*_*ght 5 .net c# java sockets tcp

我有一个Java SocketServer,它将双打发送到C#客户端.服务器发送双打,DataOutputStream.writeDouble()客户端读取双精度BinaryReader.ReadDouble().当我dos.writeDouble(0.123456789);从服务器发送 并刷新它时,客户端读取并输出3.1463026401691E + 151,这与我发送的不同.C#和Java的编码是否各不相同?

Aif*_*ify 3

在 Java 中,DataOutputStream.writeDouble()在发送之前将 double 转换为 long,先写入高字节(Big endian)。

但是,C#BinaryReader.ReadDouble()以 Little Endian 格式读取。

换句话说:字节顺序不同,更改其中之一应该可以解决您的问题。

将 Java 中的字节顺序从 Big Endian 更改为 Little Endian 的最简单方法是使用 ByteBuffer,您可以在其中指定 endian 类型:例如:

ByteBuffer buffer = ByteBuffer.allocate(yourvaluehere); 
buffer.order(ByteOrder.LITTLE_ENDIAN); 
// add stuff to the buffer
byte[] bytes = buffer.array();
Run Code Online (Sandbox Code Playgroud)

然后,使用DataOutputStream.write()