Это можно сделать для некоторого значения «возможно».
String s = "" + (char)myShort;
Однако , результирующая строка может быть недействительной, так как не все 16-битные целые числа представляют действительные (кодированные в UTF-16) кодовые точки! То есть результирующая строка может быть неверной последовательностью UTF-16. Различные строковые функции и / или кодирование / декодирование могут привести к «странному поведению» , поскольку основные правила были нарушены (я думаю, что что-то может произойти, но это немного слабо для , но. ..). Вы были предупреждены - см. Нижний пример, показывающий только одно возможное проявление.
Т.Л., др. Не использовать строки для такой передачи по сети *. Скорее, использует байтовые массивы (или ByteBuffers) и отправляет шорт в виде двух октетов, старшего и младшего. (О, и я упоминал ByteBuffers ? Взгляните на методы ...) Если нужно отправить строки, они могут быть закодированы (UTF-8), а также отправлены как «байты» в данных пакеты.
Конечно, вполне вероятно, что проще использовать стандартную сериализацию или протокольные буферы для работы с пакетами ... конечно, лучше, чем пользовательская кодировка. (Кроме того, буферы протокола выполняют некоторые хитрые трюки, такие как зигзагообразное целочисленное кодирование ...)
Удачного кодирования:)
* Хотя Quake 3 использует строки для ряда сетевых сообщений ... однако он закодировал значения «в виде простого текста» - например, «xyz = 1234» - и использовал кучу обезьяньего кода ручной сериализации.
Посмотрите последнее значение в выводе о том, почему эта "строковая вставка" может быть плохой материал ; -)
public class test1 {
public static void main (String[] args) throws Exception {
int s1 = 0xd801;
short s = (short)s1;
String x = "" + (char)s;
System.out.println("orig int: " + s1);
System.out.println("orig short: " + s);
System.out.println("length of string: " + x.length());
System.out.println("value in string: " + (short)x.codePointAt(0));
int s2 = ((short)x.codePointAt(0)) & 0xffff;
System.out.println("restored value: " + s2);
byte[] xb = x.getBytes("UTF8");
System.out.println("encoded size: " + xb.length);
String x2 = new String(xb, "UTF8");
System.out.println("decode:" + x2);
System.out.println("decode length:" + x2.length());
int s3 = ((short)x2.codePointAt(0)) & 0xffff;
System.out.println("value in string:" + s3);
}
}
Результаты в JDK 7, Windows 64.
orig int: 55297
orig short: -10239
length of string: 1
value in string: -10239
restored value: 55297
encoded size: 1
decode:?
decode length:1
value in string:63 WHAT IS THIS?!?!?! NOOOOO!!!!!