• iOS


    前言

    	@interface NSData : NSObject <NSCopying, NSMutableCopying, NSSecureCoding>
    	@interface NSMutableData : NSData
    
    • 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];
    	    
    	// 由 URL 创建
    	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];
    	    
    	// 可变 NSData 的创建
    	    
    	// 初始化时指定对象拥有的字节空间大小,在需要时会增加内存空间,在初始化时并没有分配内存空间
    	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];
    	    
    	    
    	// 字节长度的计算,NSData 的 length 属性是只读的
    	NSUInteger length1 = data1.length;
    	    
    	// 字节长度的计算,NSMutableData 的 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];
    	    
    	// 将数据写入 file
    	NSString *filePath = [NSHomeDirectory() stringByAppendingString:@"/Desktop/NSDataTest.txt"];
    	BOOL bl1 = [data writeToFile:filePath atomically:YES];
    	    
    	// 将数据写入 URL
    
    	// 该方法只支持 file:// 路径的文件写入,并不能对远程如 http:// 等类型文件进行写入
    	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";
    	    
    	// NSString 转 NSData
    	NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
    	    
    	// data 类型数据以十六进制的形式打印出
    	NSLog(@"%@", data);
    	
    	// data 类型数据以字符串的形式打印出
    	NSLog(@"%s", data.bytes);
    	    
    	// NSData 转 NSString
    	NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    
  • 相关阅读:
    h5+app 开启位置服务
    HDFS 修改默认副本数
    Flink学习之路(二)Flink搭建(单机)
    Flink学习之路(一)Flink简介
    HDFS中大数据常见运维指令总结
    hive 将hive表数据查询出来转为json对象和json数组输出
    linux下 shell时间处理
    Elasticsearch分页解决方案
    intelliJ IDEA自动优化导入包
    sql server 登录名和用户名的区别和联系
  • 原文地址:https://www.cnblogs.com/QianChia/p/5782732.html
Copyright © 2020-2023  润新知