Отправка int через сокет в Java

Каков наилучший способ отправки int через сокет в Java? Прямо сейчас я смотрю

sockout.write((byte)( length >> 24 ));
sockout.write((byte)( (length << 8) >> 24 ));
sockout.write((byte)( (length << 16) >> 24 ));
sockout.write((byte)( (length << 24) >> 24 ));

а затем пытается перестроить int из байтов с другой стороны, но, похоже, не работает. Любые идеи?

Спасибо.

Ответ 1

Оберните OutputStream DataOutputStream, а затем просто используйте метод writeInt().

Что-то еще, что может быть полезно, это то, что с другой стороны вы можете обернуть наш InputStream в DataInputStream и использовать readInt() для чтения int.

Оба класса также содержат ряд других полезных методов для чтения и записи других типов raw.

Ответ 2

Есть другие типы потоков, которые вы можете использовать, которые могут напрямую отправлять целые числа. Вы можете использовать DataOutputStream. Заметим,

DataOutputStream out;
try {
    //create write stream to send information
    out=new DataOutputStream(sock.getOutputStream());
} catch (IOException e) { 
    //Bail out
}

out.writeInt(5);

Ответ 3

Если вы отправляете небольшие объемы данных, тогда кодирование как символьные данные (например, Integer.toString(length)) и декодирование на другом конце не является необоснованным.