2011-01-02 2 views
1

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

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

< 3c3f786d 6c207665 7273696f ... > 

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

ответ

2

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

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

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

И оттуда к XML-анализатор.

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

+0

Я считаю, что вы правы в том, что данные на самом деле пересекают провод в виде текстового XML-текста, а метод -description - выбивает байты. Я обработаю прочитанную часть Windows impl и вернусь к вам. –

Смежные вопросы