懒惰的程序员警告. :)
Cassandra将列值存储为字节(Java示例)。指定LongType比较器将这些字节作为长整型进行比较。我想要一个长整型值转换为适用于Cassandra的byte[]。如何做到?我查找了一段时间。我认为你们可以更快地帮助我。
编辑:
Alexander和Eli的答案都同意此反向转换。谢谢!
懒惰的程序员警告. :)
Cassandra将列值存储为字节(Java示例)。指定LongType比较器将这些字节作为长整型进行比较。我想要一个长整型值转换为适用于Cassandra的byte[]。如何做到?我查找了一段时间。我认为你们可以更快地帮助我。
编辑:
Alexander和Eli的答案都同意此反向转换。谢谢!
public static byte[] getBytes(Long val)
throws IOException
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeLong(val);
return baos.toByteArray();
}
如果您想指定字节顺序,可以使用ByteBuffer类:
public static byte[] getBytes(Long val)
{
ByteBuffer buf = ByteBuffer.allocate(8);
buf.order(ByteOrder.BIG_ENDIAN);
buf.putLong(val);
return buf.array();
}
以下是从Java 6中复制粘贴的内容:DataOutputStream.writeLong
public final void writeLong(long v) throws IOException {
writeBuffer[0] = (byte)(v >>> 56);
writeBuffer[1] = (byte)(v >>> 48);
writeBuffer[2] = (byte)(v >>> 40);
writeBuffer[3] = (byte)(v >>> 32);
writeBuffer[4] = (byte)(v >>> 24);
writeBuffer[5] = (byte)(v >>> 16);
writeBuffer[6] = (byte)(v >>> 8);
writeBuffer[7] = (byte)(v >>> 0);
out.write(writeBuffer, 0, 8);
incCount(8);
}
public final byte[] longToBytes(long v) {
byte[] writeBuffer = new byte[ 8 ];
writeBuffer[0] = (byte)(v >>> 56);
writeBuffer[1] = (byte)(v >>> 48);
writeBuffer[2] = (byte)(v >>> 40);
writeBuffer[3] = (byte)(v >>> 32);
writeBuffer[4] = (byte)(v >>> 24);
writeBuffer[5] = (byte)(v >>> 16);
writeBuffer[6] = (byte)(v >>> 8);
writeBuffer[7] = (byte)(v >>> 0);
return writeBuffer;
}
ByteBuffer.wrap
将一个8个字节长的字节数组进行包装,并使用putLong
方法。您必须首先使用ByteBuffer.order
方法设置ByteOrder。您可以使用Cassandra的实用程序类:ByteBufferUtil.bytes(long n)