目标C中是否有来自java的readUTF()的等效方法?
这是我需要转换为目标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();
}
//.............
答案 0 :(得分:0)
您正在阅读的文件有多大?如果它的大小适中,你可以使用它:
NSString * string = [ NSString stringWithContentsOfFile:pathToFile
encoding:NSUTF8StringEncoding error:NULL ] ;
答案 1 :(得分:0)
一种方法可以是将整个文件读入字节数组(或NSData
实例),然后迭代数据。当您必须读取字符串时,请调用stringWithUTF8String:
的{{1}},然后跳过正确的字节数。编码的字符串最后有两个空字节。
因此阅读字符串可能如下所示:
NSString
我正在使用 NSData* data = ...;
const char* dataPtr = [data bytes];
// read data and move dataPtr
// read string
NSString str = [NSString stringWithUTF8String: dataPtr];
dataPtr += strlen(dataPtr) + 2;
,因为它不了解Unicode并计算字节数而不是字符数。
如果您没有任何高于00FFFF的代码点,这应该可行。如果有,我需要深入研究Java二进制数据流使用的modified UTF-8 format。