2011-11-10 79 views
2

在Java中是否存在與此Python函數等效的函數?嘗試解析數據包:是否存在與Python的「解包」等效的Java?

struct.unpack(fmt, string)

我試圖端口用Python編寫到Java解析器,我正在尋找一種方式來實現下面的代碼行:

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

沒有標準 - 當然可以全部「手動」完成,但我懷疑需要更自動的解決方案;-) – 2011-11-10 19:10:50

回答

3

我不知道任何真正的等效於Python的Java在Java中解壓縮。

傳統方法是使用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(); 

然後把這些變量到合適的對象。

請注意,我選擇將每個字段打包成最小的原語,它將保存它;這意味着將未簽名的值放入相同大小的簽名類型中。你可能更喜歡把它們放在更大的類型中,以便它們保持它們的符號(例如,將一個無符號短整型變爲int); DataInputStream有一組readUnsignedXXX()方法,您可以使用它。