iOS - Swift NSData 數據


前言

	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))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM