2

byte[16]JDBCから16バイトの配列()を読み取っていますResultSetrs.getBytes("id")、これを2つの長い値に変換する必要があります。どうやってやるの?

これは私が試したコードですが、おそらくByteBuffer正しく使用していませんでした。

byte[] bytes = rs.getBytes("id");
System.out.println("bytes: "+bytes.length); // prints "bytes: 16"

ByteBuffer buffer = ByteBuffer.allocate(16);
buffer = buffer.put(bytes);

// throws an java.nio.BufferUnderflowException
long leastSignificant = buffer.getLong();
long mostSignificant = buffer.getLong();

次を使用してバイト配列をデータベースに保存しました。

byte[] bytes = ByteBuffer.allocate(16)
    .putLong(leastSignificant)
    .putLong(mostSignificant).array();
4

4 に答える 4

4

できるよ

ByteBuffer buffer = ByteBuffer.wrap(bytes);
long leastSignificant = buffer.getLong(); 
long mostSignificant = buffer.getLong(); 
于 2011-01-22T12:11:45.547 に答える
2

バイトを挿入した後ByteBuffer、メソッドを使用してリセットする必要があります(これにより、getLong()呼び出しが最初から読み取れるようになります-オフセット0):flip()

buffer.put(bytes);     // Note: no reassignment either

buffer.flip();

long leastSignificant = buffer.getLong();
long mostSignificant = buffer.getLong();
于 2011-01-22T00:27:03.573 に答える
1
long getLong(byte[] b, int off) {
    return ((b[off + 7] & 0xFFL) << 0) +
           ((b[off + 6] & 0xFFL) << 8) +
           ((b[off + 5] & 0xFFL) << 16) +
           ((b[off + 4] & 0xFFL) << 24) +
           ((b[off + 3] & 0xFFL) << 32) +
           ((b[off + 2] & 0xFFL) << 40) +
           ((b[off + 1] & 0xFFL) << 48) +
           (((long) b[off + 0]) << 56);
}

long leastSignificant = getLong(bytes, 0);
long mostSignificant = getLong(bytes, 8);
于 2011-01-22T00:30:09.420 に答える
1

これを試して:

LongBuffer buf = ByteBuffer.wrap(bytes).asLongBuffer();
long l1 = buf.get();
long l2 = buf.get();
于 2012-10-25T12:25:01.313 に答える