2010-07-24 4 views
3

여기 내 문제가 있습니다. 하나의 큰 gzipped 파일입니다. 수백만 개의 메시지.Java의 ByteBuffer를 사용하여 수백만 개의 메시지 읽기

각 메시지는 이루어져있다 : TYPE에 따라

***************** *************** ****************** 
* 2-byte LENGTH * * 1-byte TYPE * * N-byte PAYLOAD * , where N = (LENGTH-1). 
***************** *************** ****************** 

, 나는 PAYLOAD에 오프셋에서 몇 바이트를 읽고 수락하거나 메시지를 거부 할 선택해야합니다.

나는 이런 종류의 일을 java.io.DataInputStream을 사용하여 수행하는 방법을 알고 있지만 이것은 java.nio.ByteBuffer (see here!)의 완벽한 응용 프로그램처럼 보입니다. 그러나, 나는 그것을 설정하는 데 도움이 필요합니다.

그래서 ByteBuffer를 사용하여 gzip으로 압축 된 파일에서 메시지를 읽는 방법은 무엇입니까?

업데이트

나는 내가보고 싶은 것은 효율적으로 ByteBuffer를 사용해에게 바른 길에 저를 얻을 수있는 코드의 스켈 리턴 구현 것 같다. 감사!

+0

아니요. –

+0

왜 downvote? 내가 할 수있는 최선의 방법으로 내 질문의 틀을 잡으려고 노력했다. ByteBuffer를 사용하는 샘플 코드를보고 싶습니다. 내가 온라인에서 읽은 것을 이해하는 데 어려움을 겪고있다 : ( –

+0

'@GregS :'ByteBuffer를 사용하지 않겠습니까? –

답변

2

귀하의 질문에 대답하지 않아서 불편을 끼쳐 드려 죄송 합니다만, 여기서 ByteBuffer를 DataInputStream에 사용하면 어떤 이점이 있는지 확실하지 않습니다. GZIPInputStream을 통해 스트림을 배치하여 데이터를 부 풀릴 수 있습니다.

GZIPInputStream gzipInput = new GZIPInputStream(yourInputStream); 
DataInputStream dataInput = new DataInputStream(gzipInput); 

ByteBuffer를 사용하면 입력 스트림에서 읽은 바이트를 이점없이 활용할 수 있습니다.

+0

완전히 동의합니다. 여기에서 ByteBuffer를 사용하려고 시도 할 때 어떤 점도보기가 매우 어렵습니다. – StaxMan

-1

귀하의 프로토콜에 대한 모든 것을 저레벨로 작성하는 대신, Mina 또는 Netty와 같은 라이브러리를 사용하지 않으시겠습니까? 그들은 솔루션을 구현하기가 상당히 쉽습니다. 여담으로

미나 http://mina.apache.org/

의 Netty는 http://www.jboss.org/netty

, 우리는 Red5의 미나를 사용하여 메시지의 수백만을 처리 구현의 우리가 많은.

+0

질문에 대한 답변이 없으므로 질문에 대답하지 않습니다. asker는 네트워크화 된 메시지 처리 응용 프로그램을 작성하고 있습니다.이 응용 프로그램은 두 프레임 워크 모두를위한 것입니다.이 중 잘못된 것이지만 gzip으로 처리 된 데이터를 처리 할 수있는 중 하나는 믿을 수 없습니다. – Jules

관련 문제