1
I 자동 변환 후 스위프트 3. 아이폰 OS (10)와 자동 변환까지 완전히 잘 작동
NSData+Compression.swift에 따라 확장 클래스는 다음과 같습니다에 LZMA 데이터 압축을 사용했다
import Compression
extension Data {
static func compress(_ data: Data) -> Data {
let sourceBuffer = (data as NSData).bytes.bindMemory(to: UInt8.self, capacity: data.count)
let sourceBufferSize = data.count
let destinationBuffer = UnsafeMutablePointer<UInt8>.allocate(capacity: sourceBufferSize)
let destinationBufferSize = sourceBufferSize
let status = compression_encode_buffer(destinationBuffer, destinationBufferSize, sourceBuffer, sourceBufferSize, nil, COMPRESSION_LZMA)
if status == 0 {
print("Error with status: \(status)")
}
print("Original size: \(sourceBufferSize) | Compressed size: \(status)")
return Data(bytesNoCopy: UnsafeMutablePointer<UInt8>(destinationBuffer), count: status, deallocator: .free)
}
}
이제이 메서드의 출력은 압축 된 크기가 0 인 상태에서 항상 비어 있습니다.이 코드의 문제점을 찾아 내도록 도와 줄 수 있습니까?
아마도 대상 버퍼가 너무 작습니다. 압축 방법은 항상 입력보다 더 많은 출력을 생성 할 수 있습니다. –
데이터 형식에 대해 [this] (https://github.com/mw99/DataCompression/) Swift 3 LibCompression 래퍼를 살펴볼 수 있습니다. 스트림 함수를 사용하므로 버퍼 크기에 대해 걱정할 필요가 없습니다. – LimeRed