运维开发网

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

运维开发网 https://www.qedev.com 2020-06-11 17:43 出处:网络 作者:运维开发网整理
我有一个 Java SocketServer,它将双打发送到C#客户端.服务器使用DataOutputStream.writeDouble()发送双精度数,客户端使用BinaryReader.ReadDouble()读取double. 当我发送dos.writeDouble(0.123456789);并从服务器刷新客户端读取和输出3.1463026401691E 151这与我发送的不同. C#和J
我有一个 Java SocketServer,它将双打发送到C#客户端.服务器使用DataOutputStream.writeDouble()发送双精度数,客户端使用BinaryReader.ReadDouble()读取double.

当我发送dos.writeDouble(0.123456789);并从服务器刷新客户端读取和输出3.1463026401691E 151这与我发送的不同.

C#和Java的编码是否各不相同? 在Java中,DataOutputStream.writeDouble()在发送之前将double转换为long,将其写入高字节优先(Big endian).

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

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

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

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

然后,使用DataOutputStream.write()

0

精彩评论

暂无评论...
验证码 换一张
取 消