Java到Objective-C - readUTF()的等效方法?

时间:2012-02-28 06:13:35

标签: java objective-c file-io

目标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();
}

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

2 个答案:

答案 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