簡體   English   中英

Java-InputStream .read()函數

[英]Java - InputStream .read() function

如果我使用int oneByte = dis.read(byteArray, 0, 1) ,這是否意味着我只讀取1個字節,並將其十進制值分配給整數oneByte?

如果我要檢查| 我可以做這樣的事情來打破循環的(管道)字符: while((oneByte = dis.read(byteArray, 0, 1)) != 124)

如果我使用int oneByte = dis.read(byteArray,0,1),這是否意味着我只讀取1個字節,並將其十進制值分配給整數oneByte?

不。 您將最多1個字節讀取到byteArray並接收在oneByte讀取的字節數。 也許您更喜歡:

int oneByte = dis.read();

也要小心,因為您會得到數值...而不是小數。 請記住,到達流的末尾時它將返回-1

如果我要檢查| 我可以做這樣的事情來打破循環的(管道)字符:while(((oneByte = dis.read(byteArray,0,1))!= 124)

您還需要檢查流的結尾(-1)。 嘗試更多類似這樣的方法:

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

不,這意味着您嘗試讀取1個字節,並且將實際讀取的字節數分配給oneByte。 因此,在這種情況下,oneByte不能大於1。 如果要檢查“ |” 字符,你必須做:

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

正如Matthew在評論中所說,您應該閱讀API

read()方法已重載。 沒有參數,它會做您想要的。 使用您要傳遞的參數,它返回讀取的字符數。

確保也檢查EOF-1 )。

oneByte = dis.read(byteArray,0,1); 0表示您正在從偏移量0讀取(因此,如果您尚未從流中讀取任何內容,但這將是流的開頭),1表示您要讀取最多1個字節,byteArray為您要讀取到的數組以及分配給oneByte的返回值是讀取的字節數(因為如果流中包含的字節數少於嘗試讀取的字節數,則該值將小於len參數)。

您可以使用read()方法中斷管道:

while(dis.read() !- 124)

dis.read(buffer)將返回讀取的字節數。
dis.read()將讀取一個單字節並將其值返回為整數(0到255)

while循環應該像這樣來做你想做的事情:
while ((oneByte = dis.read()) != 124)

如果您檢查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
}

這樣,任何閱讀您的代碼的人(未來的編碼員,平地機等)都將立即知道“哦,它在管道字符上中斷了”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM