2011-01-26 4 views
2

ByteBuffer (java.nio)는 Buffer 클래스보다 더 효율적 (?)이기 때문에 데이터를 읽는 데 사용해야한다고 읽었습니다. 내 질문은 멀티 캐스트 주소에서 패킷을 읽고 원시 개체로 처리하는 UDP 클라이언트를 중심으로 이루어집니다. DatagramSocket에서 이러한 패킷을 구문 분석하는 가장 효율적/가장 빠른 방법은 무엇입니까? 바로 지금, 나는 ByteBuffer를 랩핑하고 읽는 바이트 배열을 가진 데이터 그램 패킷을 가지고있다. 내 목표는 새로운 개체 생성을 최소화하고 속도를 최대화하는 것입니다.ByteBuffer 대 데이터 그램 패킷의 버퍼

+5

이 질문은 [stackoverflow.com] (http://stackoverflow.com)에 더 적합 할 것이라고 생각합니다. –

답변

3

DatagramSocketByteBuffer으로 직접 읽을 수 없지만 대신 DatagramChannel을 사용하면됩니다.

+0

DatagramSocket _can_ ByteBuffer에 직접 수신 할 수 있습니다 ("직접"으로 0 인 경우). ByteBuffer를 래핑하는 DatagramPacket을 만듭니다. ByteBuffer에서 데이터를 수신() 한 다음 읽을 수 있습니다. 패킷 구성 및 send()와 동일합니다. – charstar

+0

@charstar, 나는 그것이 맞는 것 같지 않습니다. 'DatagramPacket' 생성자는 모두 ByteBuffer가 아니라'byte []'를 사용합니다. 버퍼가있는 경우에만 버퍼의 배킹 배열을 취할 수 있으며 * 직접 * 바이트 버퍼에는 버퍼가 없을 것입니다. – finnw

0

ByteBuffer는 효율성이 아닌 프로그래머의 관점에서 효율적으로 액세스 할 수있는 충분한 기능을 버퍼가 갖고 있지 않기 때문에 사용해야한다고 생각합니다. 기본 코드가 대부분 중복되므로 효율성에 차이가 있는지 의심 스럽습니다.

간단한 바이트 배열을 사용하는 것보다 효율적인지 여부가 항상 명확하지는 않습니다. NIO 성능은 잘못 평가하기 쉽습니다.

관련 문제