2017-01-21 11 views
0

сервер посылает мне 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.

  1. Какова цель чтения (байты, 0, 4), если она не ждет 4 байтов?
  2. Как получить просто 4 байта в истинном порядке?

Примечание: если клиент использует DataInputStream, а readInt() работает отлично ...

+1

Я не уверен, что я понимаю ваш вопрос. Если DataInputStream имеет поведение, которое вам нужно, используйте его. –

+0

1. В 4 указывается максимальное количество передаваемых байтов, как это четко указано в Javadoc. 2. В вашем цикле чтения есть ошибка, которая 'readInt()' не делает. Непонятно, почему вы не используете код, который работает, и это симметрично с отправителем. – EJP

+0

Я читал на этом форуме, что BufferedInput/OutputStream был быстрее. Я хотел попробовать сравнить. – Anduriel

ответ

2

Используйте DataInputStream и его метод readInt().

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

Спасибо, кажется, работает! На самом деле, я не знал, какой синтаксис использовать, я использовал BufferedStream без DataStream ... – Anduriel

 Смежные вопросы

  • Нет связанных вопросов^_^