我目前使用Swift在iOS上存儲一些數據。這些值以2-D整數數組的形式出現,定義爲[[Int]]
。我需要將這些整數數組保存到磁盤。目前,我使用下面的函數可以這樣做:用iOS快速壓縮2D陣列
func writeDataToFile(data: [[Int]], filename: String){
let fullfile = NSString(string: self.folderpath).stringByAppendingPathComponent(filename+".txt")
var fh = NSFileHandle(forWritingAtPath: fullfile)
if fh == nil{
NSFileManager.defaultManager().createFileAtPath(fullfile, contents: nil, attributes: nil)
fh = NSFileHandle(forWritingAtPath: fullfile)
}
fh?.writeData("Time: \(filename)\n".dataUsingEncoding(NSUTF16StringEncoding)!)
fh?.writeData("\(data)".dataUsingEncoding(NSUTF16StringEncoding)!)
fh?.closeFile()
}
目前此功能工作得很好,但它產生的相對較大的文件(1.1MB每個 - 其時你在1赫茲寫他們,得到巨大的快速)。寫入的數組具有固定的大小,值將從20000 < x < 35000.有沒有辦法在運行中壓縮這些數據,以便稍後可以將數據讀入Python或某種其他語言?在使用Zip之類的庫來將文件壓縮成zip之後會更容易些嗎?是否有某種方法可將數據(不會丟失數據/保真度)轉換爲圖像(用於壓縮目的,而不是查看目的)。有一些我想與二維數組一起存儲的元數據,例如時間戳。
由於您目前保存那些爲字符串值,最簡單和最快的尺寸縮小。將它們保存爲編碼的二進制值(或Base64字符串)。然後,您可以將所有的int值轉換爲2個字節的集合(因爲無符號的2個字節最多可以存儲65536個字節)並以這種方式保存值。這將從每個int值5個字節降低到每個int值2個字節。立即節省60%。 – Putz1103
你應該把它變成一個非常好的答案。我絕對沒有必要把它當作UTF-16保存,這有點荒謬。切換到ASCII文件大小爲〜500 kb,這非常有幫助。是否有base64編碼字符串的類? – Laxsnor