C# 系统正在生成数据,并使用 SBE(简单二进制编码)通过 PrimitiveType="uint64"(长整型)向另一个 Java 系统提供数据。
在 Java 中,当数据作为原始 long 接收时,它会溢出,并且在少数情况下会导致 -ve 数字。
遇到这种情况该如何处理?
最佳答案
您可以将无符号长整型接收为long
,即不使用long 进行计算的“long”。您甚至可以使用 Long.toUnsignedString(n)
将 long 显示为无符号。
否则将其存储在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
关于Java 原始长溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55000837/