前言
- NSData 和它的可变长子类 NSMutableData 是字节缓冲区的对象化封装。我们可以获得简单缓冲区,并进行一些转换操作。
- 通常我们并不会直接创建字节数据,而是从其他类型的内容转换成字节数据。
- 所谓简单缓冲区,就是缓冲区内只包含数据,无内嵌指针。
- 对于 32 位应用程序,NSData 的缓冲区最多可以存储 2GB 数据。
- 对于 64 位应用程序,最多可以存储 8EB(即 8 亿 GB) 数据。
1、NSData 的创建
复制
NSData *data1 = [[NSData alloc] init];
NSData *data2 = [[NSData alloc] initWithData:data1];
NSData *data3 = [NSData data];
NSData *data4 = [NSData dataWithData:data3];
NSString *filePath = [NSHomeDirectory() stringByAppendingString:@"/Desktop/test.txt"];
NSData *data5 = [[NSData alloc] initWithContentsOfFile:filePath];
NSData *data6 = [NSData dataWithContentsOfFile:filePath];
NSURL *urlPath = [NSURL URLWithString:[@"file://" stringByAppendingString:[NSHomeDirectory()
stringByAppendingString:@"/Desktop/test.txt"]]];
NSData *data7 = [[NSData alloc] initWithContentsOfURL:urlPath];
NSData *data8 = [NSData dataWithContentsOfURL:urlPath];
NSString *string = @"bei jing nin hao";
NSData *data9 = [string dataUsingEncoding:NSUTF8StringEncoding];
NSData *data10 = [string dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
NSMutableData *data11 = [[NSMutableData alloc] initWithCapacity:5];
NSMutableData *data12 = [NSMutableData dataWithCapacity:5];
NSMutableData *data13 = [[NSMutableData alloc] initWithLength:10];
NSMutableData *data14 = [NSMutableData dataWithLength:10];
2、NSData 长度的计算
NSData *data1 = [@"bei jing nin hao" dataUsingEncoding:NSUTF8StringEncoding];
NSMutableData *data2 = [NSMutableData dataWithCapacity:5];
NSMutableData *data3 = [NSMutableData dataWithLength:10];
NSUInteger length1 = data1.length;
NSUInteger length2 = data2.length;
NSUInteger length3 = data3.length;
data2.length = 15;
data3.length = 15;
[data2 increaseLengthBy:5];
[data3 increaseLengthBy:5];
3、NSData 数据的获取
NSData *data = [@"bei jing nin hao" dataUsingEncoding:NSUTF8StringEncoding];
NSString *str1 = data.description;
NSString *str2 = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSString *str3 = [[NSString alloc] initWithBytes:data.bytes length:data.length encoding:NSUTF8StringEncoding];
4、NSData 的比较
NSData *data1 = [@"bei jing nin hao" dataUsingEncoding:NSUTF8StringEncoding];
NSData *data2 = [NSData dataWithData:data1];
BOOL bl1 = data1 == data2;
BOOL bl2 = [data1 isEqualToData:data2];
5、NSData 的存储
NSData *data = [@"bei jing nin hao" dataUsingEncoding:NSUTF8StringEncoding];
NSString *filePath = [NSHomeDirectory() stringByAppendingString:@"/Desktop/NSDataTest.txt"];
BOOL bl1 = [data writeToFile:filePath atomically:YES];
NSURL *urlPath = [NSURL URLWithString:[@"file://" stringByAppendingString:[NSHomeDirectory() stringByAppendingString:@"/Desktop/NSDataTest.txt"]]];
BOOL bl2 = [data writeToURL:urlPath atomically:YES];
6、NSData 与 NSString 的相互转换
NSString *string = @"bei jing nin hao";
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@", data);
NSLog(@"%s", data.bytes);
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
7、其他问题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix