转换基元与以字节方式修剪它

时间:2011-02-10 13:57:57

标签: java casting ipv4 bytebuffer

我想就我的算法的一部分提出意见/建议。

ByteBuffer bb = ByteBuffer.allocate(8);
bb.putLong(rs.getLong(index));//retrieve long from db (unsigned INT)
byte[] tmp = new byte[4];
bb.position(4);
bb.get(tmp);
(Inet4Address) InetAddress.getByAddress(tmp);

VS

ByteBuffer bb = ByteBuffer.allocate(4);
bb.putInt((int) rs.getLong(index));//retrieve long from db (unsigned INT)
bb.flip();
byte[] tmp = new byte[4];
bb.get(tmp);
(Inet4Address) InetAddress.getByAddress(tmp);

基本上我想知道在投射中是否存在性能差异,或者使用更大的ByteBuffer是否更好。

谢谢,问候,

马立克

1 个答案:

答案 0 :(得分:3)

  

基本上我想知道在投射中是否存在性能差异,或者使用更大的ByteBuffer是否更好。

与分配新的ByteBuffer并调用一些方法相比,Casting“便宜”。

我不完全确定你要做什么,但也许一个简单的转换权就可以做到这一点?例如,这段代码:

long l = rs.getLong(index);
InetAddress.getByAddress(new byte[] { (byte) ((l & 0xFF000000) >> 24),
                                      (byte) ((l & 0x00FF0000) >> 16),
                                      (byte) ((l & 0x0000FF00) >>  8),
                                      (byte) ((l & 0x000000FF) >>  0)});