如何使用 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 个字节。
- 最终,当我打印 HEX 结果时,我得到:00 00 01 00。
- 好像是这样发送的(按顺序):00 00 00 01
- 并分两部分接收:00,然后是 00 00 01
- 存储为:00 00 01 00。
这就是我没有得到 int 1 的原因。
- read(bytes, 0, 4) 如果不等待 4 的目的是什么
字节数?
- 如何以真实顺序简单地获取我的 4 个字节?
注意:当客户端使用 DataInputStream 时,readInt() 工作正常...
使用 DataInputStream
及其 readInt()
方法。
DataInputStream dIn = new DataInputStream(new BufferedInputStream(myClientSocket.getInputStream()));
int status = dIn.readInt();
服务器根据以下内容向我发送一个整数:
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 的原因。
- read(bytes, 0, 4) 如果不等待 4 的目的是什么 字节数?
- 如何以真实顺序简单地获取我的 4 个字节?
注意:当客户端使用 DataInputStream 时,readInt() 工作正常...
使用 DataInputStream
及其 readInt()
方法。
DataInputStream dIn = new DataInputStream(new BufferedInputStream(myClientSocket.getInputStream()));
int status = dIn.readInt();