我正試圖連接到WebSocket(目前使用chrome擴展)。我接收到了資料,這很正常。當我試圖轉換我從輸入流中收到的整數時,我得到的完全是其他值。在下面的例子中,我給了測驗這個詞作為輸入。那么,是我做錯了什么,還是我對輸入的解釋有問題?
代碼:
@Override
public void run() {
while (true) {
try {
if(client.getInputStream().read()!= -1) {
int i = client.getInputStream().read()。
System.out.println("Integer: " i);
byte b =(byte)i。
System.out.println("Byte: " b);
char c =(char)b;
System.out.println("Char: " c);
System.out.println("-=-=-=-=-=-=-=-=-=-=-=-");
}
} catch (IOException e) {
e.printStackTrace()。
}
}
輸出:
uj5u.com熱心網友回復:
一個java流會回傳位元組,但是read會回傳一個int,這樣你就可以得到-1。 所以如果你的服務器發送一個int,那么你需要讀取這個int的所有位元組并創建它。
你有兩種方法來做到這一點。創建一個byte[]并把它作為一個緩沖區,或者如果你要接收32位雙補整數,那么你可以使用DataInputStream。
一個使用緩沖區的例子。
@Override
public void run() {
while (true) {
try {
byte[] buffer = new byte[4] 。
if(client.getInputStream().read(buffer) != -1) {
int i = (
( ( buffer[0] & 0xff ) << 24 ) |
( ( buffer[1] & 0xff ) << 16 ) |
( (buffer[2] & 0xff ) << 8) |
(buffer[3] & 0xff)
);
System.out.println("Integer: " i)。
}
} catch(IOException e) {
e.printStackTrace()。
}
}
或者你可以使用一個DataInputStream。
DataInputStream dis = new DataInputStream(client. getInputStream())。
try{
int i = dis.readInt()。
} catch( EOFException e){
//end of file. 這就像得到-1.
} catch( IOException e ){
//do something for an error。
}
緩沖區版本使用了與java的DataInput.readInt相同的轉換,我把它包括在內作為一個例子。此外,還有一些額外的檢查應該做。盡管緩沖區有4個位元組長,但你可以讀取1到4個位元組的任何內容。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/311834.html
標籤:
上一篇:點擊按鈕時的反應式表單驗證
