сервер посылает мне Int в соответствии с:Как получить истинный порядок байтов с помощью 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 байта.
- Enventually, когда я печатаю результат HEX, я получаю: 00 00 01 00.
- Кажется, что это то, что послали, как это (в порядке убывания): 00 00 00 01
- И получил в двух части: 00, а затем 00 00 01
- хранившееся как: 00 00 01 00.
Вот почему я не получаю мой Int 1.
- Какова цель чтения (байты, 0, 4), если она не ждет 4 байтов?
- Как получить просто 4 байта в истинном порядке?
Примечание: если клиент использует DataInputStream, а readInt() работает отлично ...
Я не уверен, что я понимаю ваш вопрос. Если DataInputStream имеет поведение, которое вам нужно, используйте его. –
1. В 4 указывается максимальное количество передаваемых байтов, как это четко указано в Javadoc. 2. В вашем цикле чтения есть ошибка, которая 'readInt()' не делает. Непонятно, почему вы не используете код, который работает, и это симметрично с отправителем. – EJP
Я читал на этом форуме, что BufferedInput/OutputStream был быстрее. Я хотел попробовать сравнить. – Anduriel