如何使用BufferedInputStream.read()获得真正的字节顺序?

时间:2017-01-21 16:34:10

标签: java datainputstream bufferedinputstream

服务器根据以下内容向我发送一个int:

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个字节。

  • 最后,当我打印HEX结果时,我得到:00 00 01 00.
  • 似乎是这样发送的(按顺序):00 00 00 01
  • 收到两部分:00,然后00 00 01
  • 存储如:00 00 01 00。

这就是为什么我没有得到我的int 1。

  1. 如果不等待4,则读取(字节,0,4)的目的是什么 字节?
  2. 如何按照正确的顺序简单地获取我的4个字节?
  3. 注意:当客户端使用DataInputStream时,readInt()工作正常......

1 个答案:

答案 0 :(得分:2)

使用DataInputStream及其readInt()方法。

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