Метод write () записывает один байт.
Если вы отправите ему символ или int, он просто удалит все, что выше 8-го бита, с & 0xFF.
У вас есть больше опций с DataOutputStream (writeInt, writeShort и т. Д.), Но он использует порядок байтов с прямым порядком байтов, поэтому вам может потребоваться выполнить вызов Integer.reverseBytes () (или Short.reverseBytes ()) перед передачей значения метод writeXYZ ().
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
DataOutputStream dout = new DataOutputStream(byteStream);
dout.writeInt( 0x13 ); // L:4
dout.write( 6 ); // L:5
dout.writeShort( index ); // guess, L:7
dout.writeLong( begin ); // >4GB support? L:15
dout.writeInt( length ); // clients accept below to 2^17, L:19
dout.flush(); // to be sure
message = byteStream.toByteArray();
Примечание: в спецификации не указана длина index
, begin
и length
. Я просто хотел дать образец доступных опций.
Редактировать 2: Отредактировал образец на основе ответа Д. Шоули и найденной спецификации здесь .