3

**请检查这篇文章底部的编辑
我有一个字节缓冲区 [128 位] [有数字],我需要将其转换为大十进制、二进制、字符串,因为这些是使用 jdbc 时对应的 sql 映射。

是否有我可以使用的库 API 来执行此操作。我看到 String.valueof() 没有将字节数组作为参数。所以我坚持做这样的事情:

BigDecimal bd = new BigDecimal(bigmyBuffer.asCharBuffer().toString());

这对我来说就像一个黑客?有没有更好的方法来做到这一点,或者以一种有效的方式来做 jdbc 部分。到目前为止,我专注于在各自的 sql 列中进行插入。

编辑:
我错了,字节缓冲区不仅仅是数字,而是各种位。所以现在我需要获取 128 位字节缓冲区并将其转换为 2 个 long,然后合并为一个 bigdecimal,以便数字保持其健全性。所以像这样: LongBuffer lbUUID = guid.asLongBuffer();

firstLong=      lbUUID.get();
secondLong =      lbUUID.get();

BigDecimal = firstLong + secondLong ;

谢谢。

4

2 回答 2

1

绕过BigInteger会更好吗?使用 BigInteger,您可以将字节数组解释为正大数,并且从 BigInteger 到 BigDecimal 是非常小的一步:

byte[] data= new byte[] { 0x12, 0x04, 0x07, 0x05, 0x08, 0x11, 0x38, 0x44, 0x77, 0x33};
BigInteger bi =new BigInteger(1,data);
BigDecimal bd = new BigDecimal(bi);
于 2010-12-15T10:25:12.820 回答
0

您最大的障碍是String只能在char内部操作,因此您需要以某种方式进行转换。稍微便宜一点的方法是

BigDecimal bd = new BigDecimal(new String[bigmyBuffer]);

由于您只有数字,因此您不必担心这里的字符集。不幸的是,这仍然会创建一个临时的 String 对象。

唯一的选择是手动解析字节缓冲区(即逐个字节地遍历它,并以这种方式初始化您的 BigDecimal)——这将避免分配任何临时对象,但最终会导致更多的函数调用,所以你可能不除非您真的想避免创建该字符串,否则不想走那条路。

我不知道更多关于您的应用程序的上下文,所以我不确定您的 BigDecimal 是如何使用的。

于 2010-12-03T01:56:28.873 回答