Swift调用OC之数据存储-NSData

//*************************************

//

// Swift调用OC之数据存储NSData

//

// NSData的对象可以看做是缓冲区

// NSData是静态缓冲区(大小固定)NSMutableData是动态的

// 

// 1.创建NSData

// 2.访问数据(读取NSData)

// 3.比较数据是否相同

// 4.字节数据与Base64编码字符串互转

// 5.字节数据存储

//6.NSMutableData

//

//*************************************

 

import Foundation

 

//***************************************

//*********   1.创建NSData     **********

//***************************************

 

//初始化方法1.将其他类型转换成NSData类型(比如String)

//使用dataUsingEncoding方法

//参数1:编码格式,字典有NSUTF8StringEncoding,NSUnicodeStringEncoding,NSASCIIStringEncoding

//参数2:是否允许转换,比如替换特殊字符

let string1 = "HelloWorld"

letutf8EncodeData : NSData! = string1.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true//将字符串进行UTF8编码成NSData

 

 

//初始化方法2:指定一块新的内存空间

let withData = NSData(data: utf8EncodeData!)

 

 

//3.初始化方法3:指定contentsOfUrl参数,URL对应地址内容数据来初始化NSData

let url = NSURL(string: "https://www.163.com/in123/hello.html")

let withContentUrl = NSData(contentsOfURL: url!)

println(withContentUrl)

 

 

//初始化方法4:指定contentsOfFile参数,用文件路径所对应的内容数据来初始化NSData

//PS:CommandLine是没有Bundle,Application才有

//需要在Target-Copy Bundle Resource里面添加了文件才能获取到文件路径

var filePath = NSBundle.mainBundle().pathForResource("3001",ofType: "jpg")

iffilePath != nil {

   var withPath = NSData(contentsOfFile: filePath!)

}else{

    println("filePath = nil")

}

 

//***************************************

//******* 2.访问数据(读取NSData) **********

//***************************************

//使用description属性

let desc001 = utf8EncodeData.description

let desc002 = withData.description

 

//全都一样=<48656c6c 6f20576f 726c64>

println("utf8EncodeData=\(utf8EncodeData)")

println("desc001=\(desc001)")

println("withData=\(withData)")

println("desc001=\(desc001)")

 

//解码:

//方法1:使用.bytes属性获得NSData数据对象内容的byte数组指针,使用length获取数据字节数组的长度

 

var pointer = utf8EncodeData.bytes

var stringFromData1 : NSString! = NSString(bytes: pointer, length: utf8EncodeData.length, encoding: NSUTF8StringEncoding)

println(stringFromData1) //HelloWorld

 

//方法2: so easy...

var stringFromData2 : NSString! = NSString(data: utf8EncodeData,encoding: NSUTF8StringEncoding)

 

 

//***************************************

//********* 3.比较数据是否相同  **********

//***************************************

//方法1:使用"==="

//方法2:使用isEqualToData

 

let str1 = "Hello"

let str2 = "hello"

 

let nsData1 : NSData! = str1.dataUsingEncoding(NSUTF8StringEncoding,allowLossyConversion: true)

let nsData2 : NSData! = str2.dataUsingEncoding(NSUTF8StringEncoding,allowLossyConversion: true)

 

let Bool1 : Bool = nsData1 === nsData2     //false

let Bool2 = nsData1.isEqualToData(nsData1//true

 

//******************************************************

//

//****       4.字节数据与Base64编码字符串互转        *****

//Base64编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到

//

//******************************************************

//数据传输中,往往将NSData对象进行Base64字符串编码及反编码(接收)

 

let str401 = "HelloO"

//Step1:UTF编码称NSData

let nsData401 : NSData! = str401.dataUsingEncoding(NSUTF8StringEncoding,allowLossyConversion: true)

 

//Step2:NSData进行Base64编码生成字符串

let base64str401 = nsData401.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.allZeros) //"SGVsbG9P"

 

//Step3:Base64字符串解码为NSData

let base64data = NSData(base64EncodedString:base64str401, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters)

 

//Step4:NSData转码为string

let strWithDecode401 =NSString(data:base64data!, encoding: NSUTF8StringEncoding)

println(strWithDecode401!) //HelloO

 

 

//******************************************

//

//****         5.字节数据存储           *****

//

//******************************************

//例子:将一个字符串存储到Documents文档目录下

letstring501 = "字节数据存储"

let utf8ECData = string501.dataUsingEncoding(NSUTF8StringEncoding,allowLossyConversion: true)

var pathArray: Array = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)

var defaultPath = pathArray[0] as String

 

let textPath = defaultPath + "/text.txt"

 

//println(pathArray)

println(defaultPath)

//上面两个路径是一样的都是Users/EvaZis-Pro/Library/Containers/com.apple.dt.playground.stub.OSX.C01-NSData-xxxx(xxxx这段会变化)/Data/Documents,这是一个沙箱目录

//println(textPath)

 

let result = utf8ECData?.writeToFile(textPath, atomically: true) //这句写文件,true表示先写入到一个备份文件中,如果没有抛出异常,再将文件重命名成path参数设置的名称,可以避免写入异常导致数据损坏;如果是false则直接写入对应的路径

println("write to fileresule : \(result)")

 

//下面的方法支持写入file://路径,但不支持写入远程路径如http:// ....

//letresult = utf8ECData?.writeToURL(textPath, atomically: true)

 

 

//******************************************

//

//****         6.NSMutableData         *****

//

//******************************************

//初始化方法1:指定初始大小,该空间后续可以变化

var mutableData1 : NSMutableData! = NSMutableData(capacity:10)

println(mutableData1)   // <>

mutableData1.length     // 10

 

//初始化方法2:指定初始大小并将内容归零,该空间后续可以变化

var mutableData2 : NSMutableData! = NSMutableData(length: 10)

println(mutableData2)   // <00000000 00000000 0000>

mutableData2.length     // 10

 

//扩充长度

mutableData2.increaseLengthBy(3)

println(mutableData2)   // <00000000 00000000 00000000 00>

mutableData2.length     // 13

 

//重新赋值长度,则内容会截取或者扩充

mutableData2.length = 5

println(mutableData2)   // <00000000 00>

mutableData2.length = 7

println(mutableData2)   // <00000000 000000>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值