Подход может состоять в том, чтобы прочитать весь файл в байтовый массив (или 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.