2011-02-10 3 views
3

알고리즘에 대한 의견이나 조언을 요청합니다.기본형 캐스팅 대 바이트 형 트리밍

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를 사용하는 것입니다 여부를 알고 싶습니다.

감사합니다, 감사합니다,

마렉

+4

이 두 블록을 메서드로 묶고 여러 테스트를 작성하고 성능을 비교합니다. 정확한 결과를 얻을 수있을 때 다른 사람들의 의견에 의존하는 이유는 무엇입니까? –

답변

3

기본적으로 내가 거기 캐스팅의 성능 차이 또는 더 나은 더 큰 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)}); 
+0

+1 - 'int'를'byte [4] '로 변환하기위한'ByteBuffer'를 생성하고 사용하는 것은 성능면에서 끔찍 스럽습니다. –

+1

BTW'(byte) ((1 & 0x000000FF) >> 0)'(byte) l'과 동일합니다.) –

+0

@Peter, 아아 ;-) nice – aioobe