zoukankan      html  css  js  c++  java
  • iOS

    前言

        public class NSData : NSObject, NSCopying, NSMutableCopying, NSSecureCoding
        public class NSMutableData : NSData
    • NSData 和它的可变长子类 NSMutableData 是字节缓冲区的对象化封装。我们可以获得简单缓冲区,并进行一些转换操作。通常我们并不会直接创建字节数据,而是从其他类型的内容转换成字节数据。

    • 所谓简单缓冲区,就是缓冲区内只包含数据,无内嵌指针。

    1、NSData 的创建

        // 由字符串创建
        let swiftString:String = "Hello World"
        let nsString:NSString = "hello world"
            
        // allowLossyConversion 表示在转换过程中是否允许字符进行必要的删减或者替换  
        let data1:NSData? = swiftString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
        let data2:NSData? = nsString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
        
        // 由已知数据创建,两个对象的地址不相同
        let data3:NSData = NSData(data: data1!)
            
        // 由文件创建
        let data4:NSData? = NSData(contentsOfFile: NSHomeDirectory().stringByAppendingString("/Desktop/test.txt"))
            
        // 由 URL 创建
        let data5:NSData? = NSData(contentsOfURL: NSURL(string: "http://www.baidu.com")!)
            
        // 可变 Data 的创建
                
            // 初始化时指定对象拥有的字节空间大小,在需要时会增加内存空间,在初始化时并没有分配内存空间
            let data6:NSMutableData? = NSMutableData(capacity: 0)
                
            // 初始化时为对象分配指定长度的归零字节
            let data7:NSMutableData? = NSMutableData(length: 10)

    2、数据的长度

        let data1:NSData = "Hello World".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)!
            
        // 指定空间大小,不分配空间
        let data2:NSMutableData = NSMutableData(capacity: 10)!
            
        // 分配指定长度的归零字节
        let data3:NSMutableData = NSMutableData(length: 10)!
            
        // 字节长度的计算,NSData 的 length 属性是只读的,字节长度的计算,NSMutableData 的 length 可以被重新赋值
        let num1:Int = data1.length
        let num2:Int = data2.length
        let num3:Int = data3.length
            
        // 重新设置空间的大小,对象的字节空间会相应的扩充或者截断。如果新设置的大小大于当前大小,
        // 会在当前数据的末尾处用归零字节来进行填充。如果新设置的大小小于当前大小,数据会被截断抛弃。
        data2.length = 5
        data3.length = 5
        
        // 扩充指定长度,新添加的空间被设置为归零字节
        data2.increaseLengthBy(7)
        data3.increaseLengthBy(7)

    3、数据的获取

        let data:NSData = "Hello World".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)!
            
        // 默认为内容数据的十六进制编码
        let dataFromNSData1 = data.description                      
            
        let dataFromNSData2:NSString? = NSString(data: data, encoding: NSUTF8StringEncoding)
            
        let dataFromNSData3:NSString? = NSString(bytes: data.bytes, length: data.length, encoding: NSUTF8StringEncoding)

    4、NSData 的比较

        let data1:NSData = "Hello World".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)!
        let data2:NSData = NSData(data: data1)
            
        // 比较两个对象的地址是否一致
        let bl1:Bool = data1 === data2
            
        // 比较两个对象的长度及每字节的数据是否相同
        let bl2:Bool = data1.isEqualToData(data2)

    5、NSData 的存储

        let data:NSData = "Hello World".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)!
            
        // 将数据写入 file
        let bl1:Bool = data.writeToFile(NSHomeDirectory().stringByAppendingString("/Desktop/test.txt"), atomically: true)
            
        // 将数据写入 URL,该方法只支持 file:// 路径的文件写入,并不能对远程如 http:// 等类型文件进行写入
        let bl2:Bool = data.writeToURL(NSURL(string: "file://".stringByAppendingFormat("%@%@", 
                                                             NSHomeDirectory(), "/Desktop/test.txt"))!, atomically: true)

    6、NSData 与 字符串 的相互转换

        let string:String = "Hello World"
            
        // 字符串 转 NSData
        let data:NSData = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)!
            
        // NSData 转 字符串
        let utf8String:NSString = NSString(data: data, encoding: NSUTF8StringEncoding)!

    7、NSData 与 Base64编码字符串 的相互转换

        let data:NSData = "Hello World".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)!
            
        // NSData 转换为 Base64编码的字符串
        let base64String:String = data.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
            
        // Base64编码的字符串 转换为 NSData
        let nsData:NSData? = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions(rawValue: 0))

    如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Codeforces 1265A Beautiful String
    1039 Course List for Student (25)
    1038 Recover the Smallest Number (30)
    1037 Magic Coupon (25)
    1024 Palindromic Number (25)
    1051 Pop Sequence (25)
    1019 General Palindromic Number (20)
    1031 Hello World for U (20)
    1012 The Best Rank (25)
    1011 World Cup Betting (20)
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/6010846.html
Copyright © 2011-2022 走看看