Java для Objective-C - эквивалентный метод для чтения UTF ()? - PullRequest
2 голосов
/ 28 февраля 2012

Есть ли какой-нибудь эквивалентный метод для readUTF () из Java в цели C?

Вот фрагмент, который мне нужно преобразовать в цель C:

FileInputStream in = new FileInputStream(mapfile.dat);
ObjectInputStream si = new ObjectInputStream(in);
si.readUTF();

boolean create = si.readBoolean();
si.readBoolean();
if (create) {

    si.readInt();
    si.readInt();
    si.readInt();
    si.readInt();
    int num=si.readInt();
    if (num>0) {
            for (int i=0;i<num;i++) {
                    si.readObject();
            }
            si.readInt();
    }
    num=si.readInt();
}

//.............

Ответы [ 2 ]

0 голосов
/ 28 февраля 2012

Подход может состоять в том, чтобы прочитать весь файл в байтовый массив (или NSData экземпляр), а затем выполнить итерацию по данным.Когда вам нужно прочитать строку, вы вызываете stringWithUTF8String: из NSString и затем пропускаете правильное количество байтов.Закодированная строка имеет два нулевых байта в конце.

Таким образом, чтение строки может выглядеть следующим образом:

 NSData* data = ...;
 const char* dataPtr = [data bytes];

 // read data and move dataPtr

 // read string
 NSString str = [NSString stringWithUTF8String: dataPtr];
 dataPtr += strlen(dataPtr) + 2;

Я использую strlen, потому что он не знает о Unicodeи учитывает байты, а не символы.

Это должно работать, если у вас нет кодовых точек выше 00FFFF.Если у вас есть, мне нужно углубиться в модифицированный формат UTF-8 , используемый потоками двоичных данных Java.

0 голосов
/ 28 февраля 2012

Насколько велик файл, с которого вы читаете?Если он скромного размера, вы можете использовать это:

NSString * string = [ NSString stringWithContentsOfFile:pathToFile 
                                               encoding:NSUTF8StringEncoding error:NULL ] ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...