2011-11-24 74 views
1

如果我使用int oneByte = dis.read(byteArray, 0, 1)這是否意味着我只讀1個字節,並將其十進制值賦值爲整數oneByte?Java - InputStream .read()函數

如果我想檢查| (管道)字符,我可以這樣做: while((oneByte = dis.read(byteArray, 0, 1)) != 124)

+1

請參閱InputStream的javadoc:http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html#read(byte [],int,int) –

回答

7

如果我使用int oneByte = dis.read(字節陣列,0,1),這是否意味着我 僅讀取1個字節,我賦予它的十進制值爲整數 oneByte?

沒有。您正在將最多1個字節讀入byteArray並接收在oneByte中讀取的字節數。也許你更喜歡:

int oneByte = dis.read(); 

另外要小心,因爲你會得到整數值...不是一個小數。請記住,當您到達流尾時,它將返回-1

如果我想檢查| (管)字符跳出循環,我可以 做這樣的事情:而(!(oneByte = dis.read(字節陣列,0,1))= 124)

你需要還檢查流結束(-1)。嘗試更多的東西是這樣的:

while(true) { 
    int oneByte = dis.read(); 
    if(oneByte == -1 || oneByte == '|') { 
     break; 
    } 
} 
0

不,這意味着您正在嘗試讀取1個字節,並且您將實際讀取的字節數分配給oneByte。所以在這種情況下oneByte不能大於1。如果你想檢查「|」燒焦你要做的:

dis.read(byteArray, 0, 1); 
while(byteArray[0] != 124) { 
    dis.read(byteArray, 0, 1); 
} 
0

馬修在評論說,你應該閱讀the API

read()方法被重載。沒有理由,它會做你想做的事。通過你傳遞的參數,它返回讀取的字符數。

請確保您檢查了EOF-1)。

0

oneByte = dis.read(byteArray,0,1);的0意味着你從0偏移讀取(因此,如果您還沒有從流讀取任何東西,這將是該流的開始) ,1表示您想要讀取多達1個字節,byteArray是您正在讀取的數組,並且分配給oneByte的返回值是讀取的字節數(因爲如果您的數據流包含的字節少於您嘗試讀取的字節數這個數字將小於len參數)。

您可以通過管道使用的read()方法破解:

while(dis.read() !- 124) 
0

dis.read(緩衝區)將返回的結果中讀取的字節數。
dis。閱讀()將讀取單個字節,並返回它的值作爲整數(0到255)

while循環應該是這樣做你想要什麼:
while ((oneByte = dis.read()) != 124)

0

如果check the Java API for InputStream,你將看到InputStream.read(byte [],int,int)的'返回'值描述爲:

the total number of bytes read into the buffer, or -1 if there is 
no more data because the end of the stream has been reached. 

因此,您正在讀取一個字節並存儲到byteArray [0]中。 OneByte將爲-1,0或1.在這種情況下,打破循環將不起作用。但是,爲了記錄,如果你一次只需要一個字節,那麼InputStream.read()方法就可以做到。

爲了便於閱讀,您也可能希望檢查您要查找的確切字符。所以:

while (stream.read()!='|'){ 
    //stuff 
} 

這樣一來,誰讀你的代碼(未來打碼機,平地機等)會立即知道「哦,它打破了對管道字符」。