Преобразование NSData (в формате plist) в строку Java

Привет, ребята, у меня есть приложение Cocoa, которое отправляет NSDictionary по сети на различные устройства. Раньше он отправлялся только на другие компьютеры Mac, поэтому использование NSKeyedArchiver для записи в объект NSData работало нормально, с другой стороны, я использовал NSKeyedUnarchiver.

Сейчас я пишу реализацию Java для поддержки Windows, и мне нужно преобразовать данные plist, которые поступают по сети, например:

< 3c3f786d 6c207665 7273696f ... >

в простую строку Java. (Чтобы я мог прочитать его с помощью синтаксического анализатора XML.) Здесь, похоже, ответ противоположный: [https://stackoverflow.com/questions/3774872], но я все еще не могу понять, в каком порядке я должен выполнять кодирование/декодирование. 1


person Craig Otis    schedule 02.01.2011    source источник


Ответы (1)


«Строка», которую вы видите по сети, на самом деле является XML-файлом, как он выглядит в необработанном виде.

Если вы видите его как объект массива byte[], его можно передать конструктору java.lang.String:

byte[] theBytes = ...;
String theString = new String(theBytes, "UTF-8");

И оттуда в парсер XML.

Если фактические байты, передаваемые по сети, равны '<', ' ', '3', 'c' и т. д., то что-то не так на стороне, отправляющей данные, потому что она, по-видимому, преобразует данные в NSString с помощью метода данных -description перед отправкой. NSKeyedUnarchiver недостаточно умен, чтобы иметь дело с такой строкой, поэтому я не подозреваю, что это так, но если это так, довольно просто преобразовать его обратно в необработанный поток байтов, а затем использовать приведенный выше конструктор Java, чтобы получить вашу строку XML обратно.

person Jonathan Grynspan    schedule 02.01.2011
comment
Я полагаю, что вы правы в том, что данные на самом деле передаются по сети в виде простого текста XML, а метод -description выдает байты. Я дополню прочитанную часть реализации Windows и вернусь к вам. - person Craig Otis; 02.01.2011