簡體   English   中英

如何使用BufferedInputStream.read()獲得真實的字節順序?

[英]How to get true byte order with BufferedInputStream.read()?

服務器根據以下條件向我發送一個整數:

DataOutputStream stdOut = new DataOutputStream(myServerSocket.getOutputStream());
stdOut.writeInt(1);
stdOut.flush();

我嘗試通過以下方式向客戶閱讀:

BufferedInputStream dIn = new BufferedInputStream(myClientSocket.getInputStream());
byte[] reception        = new byte[4]; // writeInt() writes 4 bytes
int status              = -1;

status = dIn.read(reception, 0, 4); 
// status = 1
// (int) reception = 0

我正在等待4個字節來計算發送的Int。 但是,它僅接收1個字節並對其進行處理,而無需等待剩余的字節。 因為我等待4個字節,所以我嘗試了以下方法:

int count = 0;
while(count < 4) {
    status = dIn.read(reception);
    count += status;
    System.out.println("Read: " + count);
}*/

我看到它讀取1個字節,然后讀取3個字節。

  • 當我打印十六進制結果時,得到的信息是:00 00 01 00。
  • 似乎是這樣發送的(按順序):00 00 00 01
  • 並分為兩部分:00,然后00 00 01
  • 存儲方式為:00 00 01 00。

這就是為什么我沒有得到我的詮釋1。

  1. 如果不等待4個字節,read(bytes,0,4)的目的是什么?
  2. 如何簡單地按真實順序獲取我的4個字節?

注意:當客戶端使用DataInputStream時,readInt()可以正常工作...

使用DataInputStream及其readInt()方法。

DataInputStream dIn = new DataInputStream(new BufferedInputStream(myClientSocket.getInputStream()));
int status = dIn.readInt();

暫無
暫無

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

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