gpt4 book ai didi

ios - 我可以在不破坏数据的情况下将另一个 NSData 中的 NSData 对象存档吗?

转载 作者:行者123 更新时间:2023-11-29 13:17:55 27 4
gpt4 key购买 nike

我有两个 NSData 对象,我想将它们存储在第三个 NSData 对象中。我的想法是,当我稍后解码较大的对象时,我希望能够轻松地获得彼此独立的两个较小的对象,而不用担心它们的相对大小或数据类型。

看起来最好的方法是使用 NSKeyedArchiver 在较大的 NSData 对象中创建一种根级键值结构,我可以在其中将两个较小的对象存储在单独的键中。这就是我在这里尝试做的:

NSData *data1Before = [@"abcdefgh" dataUsingEncoding:NSUTF8StringEncoding];
NSData *data2Before = [@"ijklmnop" dataUsingEncoding:NSUTF8StringEncoding];

NSMutableData *allData = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:allData];
[archiver encodeObject:data1Before forKey:@"key1"];
[archiver encodeObject:data2Before forKey:@"key2"];
[archiver finishEncoding];

NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:allData];
NSData *data1After = [unarchiver decodeObjectForKey:@"key1"];
NSData *data2After = [unarchiver decodeObjectForKey:@"key2"];
[unarchiver finishDecoding];

NSString *string1After = [NSString stringWithUTF8String:[data1After bytes]];
NSString *string2After = [NSString stringWithUTF8String:[data2After bytes]];

NSLog(@"after1: %@",string1After);
NSLog(@"after2: %@",string2After);

问题是,当你一遍又一遍地运行这段代码时,你会从 NSLog 语句中得到各种不同的结果——有时特殊字符会附加到字符串的末尾,有时它们只是 NULL。

看来这种损坏与我正在使用的这种“双重编码”过程有关。当我修改代码以便 NSKeyedArchiver 直接在 NSStrings 上而不是在 NSData 对象上调用 encodeObject 时,我稍后可以使用 decodeObjectForKey 并毫无问题地获取这些字符串——完全没有损坏。

有没有比使用 NSKeyedArchiver 更好的方法?还是我使用不当?

最佳答案

感谢 rmaddy 上面的回答 - 我只需要替换它:

[NSString stringWithUTF8String:[data1After bytes]];

用这个:

[[NSString alloc] initWithData:data1After encoding: NSUTF8StringEncoding];

然后修复了它。

关于ios - 我可以在不破坏数据的情况下将另一个 NSData 中的 NSData 对象存档吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15180491/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com