Кастинг примитива против обрезки байтов - PullRequest
3 голосов
/ 10 февраля 2011

Я хотел бы попросить мнения / советы относительно части моего алгоритма.

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);

против

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.

Спасибо, привет,

Marek

1 Ответ

3 голосов
/ 10 февраля 2011

В основном я хотел бы знать, есть ли разница в производительности при кастинге или лучше использовать больший ByteBuffer.по сравнению с выделением новых ByteBuffer и вызовом нескольких методов.

Я не совсем уверен, что вы пытаетесь сделать, но, возможно, простое смещение вправо поможет?Например, этот фрагмент кода:

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)});
...