現在、Swiftを使用してiOSにデータを保存しています。値は、[[Int]]
として定義された2次元整数配列として返されます。これらの整数配列をディスクに保存する必要があります。現在、私はそうするために、次の関数を使用しています:iOSを使用してオンザフライで2次元配列を圧縮
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.1メガバイトそれぞれのファイル生成 - あなたは1 Hzでそれらを書いている、取得します非常に速い)。書き込まれた配列のサイズは固定されており、値は20000 < x < 35000です。このデータを圧縮して後でPythonや他の言語にデータを読み込む方法はありますか? zipのようなライブラリを書いた後にzipに圧縮するほうが簡単でしょうか?データを(データ/忠実度を失うことなく)画像に変換する方法がいくつかあります(圧縮目的で、表示目的ではありません)。タイムスタンプなど、2次元配列とともに保存したいメタデータがいくつかあります。
を使用すると、現在の文字列値としてそれらを保存しているので、最も簡単かつ最速の小型化は、バイナリ値(またはbase64でエンコードされたとして保存することです文字列)。次に、すべてのint値を2バイトセットに変換し(符号なし2バイトは65536まで格納できるため)、そのように値を保存します。これはint値あたり5バイトからint値あたり2バイトになります。 60%の即時節約。 – Putz1103
これを回答優勢のポイントにする必要があります。私がUTF-16として保存する必要は全くありません。それはちょっとばかげたことでした。 ASCIIに切り替えるとファイルサイズが〜500 kbになり、非常に役立ちます。 base64でエンコードされた文字列のクラスはありますか? – Laxsnor