Java 原始长溢出

标签 java integer-overflow

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/

相关文章:

java - 从已删除的类中获取错误

Java:如何编写 try-catch-repeat block ?

java - 为什么这个 long 溢出到 -1,而不是类型的最小值?

c++ - G++ 允许在 x64 上进行隐式 long-to-int 截断

java - 非空字符串的哈希码可以为零吗?

c++ - INT_MAX+a-b 不会导致溢出但 INT_MAX*a/b 会导致溢出(如果 a>1 且 a=b)吗?

java - 在 Java 中,是否可以在接口(interface)内部使用类型变量作为数组元素?

java - 从 service-mix 文件轮询器迁移到 apache Camel 文件轮询器

c++ - C++中俄罗斯农民算法中的整数溢出

java - 使用 Java 编写 HTML 文件