2011-02-09 75 views
1

我有以下問題:我必須從InputStream中讀取數據序列,但由於它自己的安排,我需要讀取前4個字節作爲無符號短(16位),這樣我將讀兩個字節的塊,因爲這些字節的含義是數字,但在此之後,我需要讀取一個無符號字節,因爲所有其餘數據的含義都是ASCII。InputStream讀取故障

有人可以告訴我如何做到這一點?

+0

「讀取前4個字節爲無符號短(16位)」=> 4個字節不能讀爲無符號短符號...但是2個字節可以。至於下一個無符號字節:只需使用InputStream中的plain read()方法即可:Javadoc表示「從輸入流中讀取下一個字節的數據,值的字節返回值爲int,範圍爲0到255」。 – 2011-02-09 21:17:22

回答

0

Java中沒有未簽名的short,Java中的所有數字都已簽名,您將需要int來存儲未簽名的short。正如@chicharo所指出的,一個無符號的short將只佔用2個字節的內存,而不是4個字節。

下面的代碼會做你想要什麼:

int number = inputStream.read() | (intputStream.read() << 8); 
byte[] buffer = new byte[2048]; 
int lenRead = 0; 
while ((lenRead = inputStream.read(buffer)) != -1) { 
    // write lenRead bytes each time to somewhere, like a ByteArrayOutputStream.. 
    ...... 
} 

注:我以爲你在爲了低位得到第一份書面寫下你的電話號碼。