Я очень новичок в Xcode и iOS, у меня есть устройство, назовем его Brains, к которому я подключаюсь через Bluetooth LE с помощью приложения, которое я создал с помощью Swift 4 и Xcode 10 на моем iPhone 5, назовите его Body,Мозги похожи на плату arduino, но не совсем.Я могу без проблем подключиться и получить все данные с помощью BLE, пока не попробую получить сжатый файл, заполненный строками json.Я получаю сжатые байты, но не могу понять, что делать дальше.Как я могу получить сжатый файл, распаковать его и прочитать данные внутри?
Я пробовал много вещей с помощью модулей: GzipSwift , DataCompression и SSZipArchive
Я использовал gunzipped (), gunzip () и depress (), но, похоже, ни один из них не работает.
Я читал эту ветку: iOS:: Как распаковать файл .gz с помощью GZIP Utility? и он говорит, что мне нужно получить весь сжатый поток байтов и преобразовать его в NSData, а затем распаковать его, проблема в том, что он использует target-c, и я не могу перевестив swift 4.
Я получаю байты от характеристики Bluetooth LE в массиве [UInt8]
, в этой функции:
func received_logs(data: [UInt8]) {
let data_array_example = [31, 139, 8, 8, 16, 225, 156, 92, 2, 255, 68, 97, 116, 97, 0, 181, 157, 107, 110, 220, 56, 16, 6, 175, 226, 3, 248, 71, 63, 73, 234, 44, 193, 222, 255, 26, 171, 30, 35, 192, 90, 20, 18, 121, 182, 11, 112, 16, 35, 48, 10, 31, 154, 197, 22, 135, 34, 227, 95, 191, 76, 244, 16, 183, 248, 252, 48, 137, 229, 38, 242, 249, 161, 231, 87, 156, 127, 207, 113, 126, 227, 159, 31, 231, 183, 110, 223, 255, 200, 239, 47, 203, 252, 253, 173, 255, 231, 159, 235, 235, 108, 105, 110, 101, 48, 47, 50, 48]
for data_byte in stride(from: 0, to: data_array_example.count, by: 1) {
let byte = String(data_array_example[data_byte])
sourceString = sourceString + byte //getting all the bytes and converting to string to store in a variable
}
/******************************************************************/
let text = sourceBuffer
do {
try text.write(to: path!, atomically: false, encoding: String.Encoding.utf8)
}
catch {
print("Failed writing")
} //dump the var into a txt file
/**********UPDATED**********/
var file_array : [UInt8] = []
let byte2 = NSData(data: data_array_example.data)
let asc_array = Data(bytes: byte2.data)
let decompressedData: Data
do {
try decompressedData = asc.gunzipped()
print("Decom: ", String(data: decompressedData, encoding: .utf8))
}
catch {
print(error) //Gives me the "unknown compression method error"
}
}
Я ожидаю увидеть содержимое несжатого файла, ноЯ получаю только:
GzipError(kind: Gzip.GzipError.Kind.data, message: "incorrect header check")
Может быть, я просто усложняю, чем нужно.Любая помощь будет принята с благодарностью!
Большое спасибо:)
ОБНОВЛЕНИЕ: Я создал файл .gz и использовал и gunzipped (), и gunzip () и оба они работали.
ОБНОВЛЕНИЕ:
Попытка напрямую преобразовать данные в NSData и затем gunzip (), но теперь получаю ошибку:
GzipError(kind: Gzip.GzipError.Kind.data, message: "unknown compression method")