Отправка 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)
) и декодирование на другом конце не является необоснованным.