Отправка int через сокет в Java - PullRequest
11 голосов
/ 17 сентября 2009

Каков наилучший способ отправки 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 из байтов на другой стороне, но, похоже, это не работает. Есть идеи?

Спасибо.

Ответы [ 3 ]

27 голосов
/ 17 сентября 2009

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

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

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

3 голосов
/ 17 сентября 2009

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

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

out.writeInt(5);
0 голосов
/ 17 сентября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...