Java原始长时间溢出

时间:2019-03-05 10:39:05

标签: java integer-overflow

一个C#系统正在生成数据,并使用由primaryType =“ uint64”(长)使用SBE(简单二进制编码)向另一个Java系统提供数据。

在Java中,当长时间以原始形式接收数据时,它会溢出并且在少数情况下会导致-ve数字。

如何处理这种情况?

1 个答案:

答案 0 :(得分:1)

您可以收到long形式的无符号长整数,因为“ long”不是用长整数计算得出的。您甚至可以使用Long.toUnsignedString(n)显示未签名的时间。

否则将其存储在BigInteger中。理想情况下,加载为8个大端字节。

// Some snippets, unordered, showing useful constructs.
long n = ...;
n = Long.reverseBytes();
byte[] bigendian = new byte[8];
ByteBuffer buf = ByteBuffer.wrap(bigendian); // .order(ByteOrder.LITTLE_ENDIAN);
buf.putLong(n);

// Creating a BigInteger from unsigned long's bytes, requiring big-endian order.
BigInteger num = new BigInteger(1, bigendian); // 1 = positive