3

**この投稿の下部にある編集を確認してください
。バイトバッファ[128ビット][数値があります]は、jdbcを使用しているときに対応するSQLマッピングであるため、bigdecimal、binary、stringに変換する必要があります。

これを行うために使用できるライブラリ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 に答える