2011-11-10 4 views
2

Java에서이 Python 함수와 동일한 기능이 있습니까?패킷 분석 시도 : 파이썬의 "압축 해제"에 해당하는 Java가 있습니까?

struct.unpack(fmt, string)

나는 포트에 자바에 파이썬으로 작성된 파서를 시도하고, 나는 다음 코드 줄 구현하는 방법을 찾고 있어요 : I를 사용하고

handle, msgVer, source, startTime, dataFormat, sampleCount, sampleInterval, physDim, digMin, digMax, physMin, physMax, freq, = unpack(self.headerFormat,self.unprocessed[pos:pos+calcsize(self.headerFormat)]) 

을 이것은 네트워크에서 바이트를 받고 바이트를 표시하기 위해 바이트의 특정 부분을 추출해야하는 프로젝트 컨텍스트에서입니다.

[수정 2]

내가 업데이트로 게시 한 결론은 잘못이었다. 다른 사람들을 오도하는 것을 피하기 위해 그것을 삭제했습니다.

+0

도움이 되나요? http://download.oracle.com/javase/6/docs/api/index.html?java/io/FileWriter.html – r0ast3d

+0

스캐너 - http://download.oracle.com에서 살펴보십시오. /javase/1,5,0/docs/api/java/util/Scanner.html –

+1

표준이 없습니다. 물론 "수동으로"모두 수행 할 수 있지만 더 자동화 된 솔루션이 필요합니다 .-) –

답변

3

저는 파이썬이 자바로 압축을 풀어 본 것과 같은 것을 전혀 모릅니다.

일반적인 방법은 DataInputStream을 사용하여 스트림 (소켓 또는 ByteArrayInputStream을 통해 소켓에서 읽은 바이트 배열에서 시작 함)에서 데이터를 읽는 것입니다. 이 클래스에는 다양한 프리미티브를 읽는 메소드 세트가 있습니다. 귀하의 경우에는

, 당신은 같은 것을 할 것 :

DataInputStream in; 
char[] handle = new char[6]; in.readFully(handle); 
byte messageVersion = in.readByte(); 
byte source = in.readByte(); 
int startTime = in.readInt(); 
byte dataFormat = in.readByte(); 
byte sampleCount = in.readByte(); 
int sampleInterval = in.readInt(); 
short physDim = in.readShort(); 
int digMin = in.readInt(); 
int digMax = in.readInt(); 
float physMin = in.readFloat(); 
float physMax = in.readFloat(); 
int freq = in.readInt(); 

을 그리고 적절한 객체에 그 변수를 설정합니다.

각 필드를 보유 할 가장 작은 기본 요소로 각 필드를 묶는 것을 선택했습니다. 이는 부호없는 값을 동일한 크기의 부호있는 유형에 넣는 것을 의미합니다. 서명을 유지하기 위해 (예를 들어, 부호없는 short를 int로 넣는) 더 큰 유형으로 두는 것을 선호 할 수 있습니다. DataInputStream에는 그 용도로 사용할 수있는 readUnsignedXXX() 메소드 세트가 있습니다.

관련 문제