Czy istnieje klasa, która umożliwia kompresowanie danych za pomocą Zlib, lub używa bezpośrednio zlib.dylib jako jedynej możliwości, którą mam?Jak mogę skompresować dane za pomocą Zlib, bez bezpośredniego użycia zlib.dylib?
Odpowiedz
NSData + Kompresja to łatwa w użyciu implementacja kategorii NSData.
Zastosowanie:
NSData* compressed = [myData zlibDeflate];
NSData* originalData = [compressed zlibInflate];
Dziękuję. Zawiera kod, który faktycznie potrzebuję. Nie widzę części do zapisania danych w pliku, ale nie jest to trudne do napisania. – kiamlaluno
Jako alternatywa, istnieje również objective-zip, która jest „biblioteki małych kakao/cel-C, która otacza ZLib i MiniZip w przyjazny dla użytkownika sposób. "
zapisanie pliku na „.zip” archiwum jest proste jak wykonanie następującego kodu:
ZipWriteStream *stream = [zipFile writeFileInZipWithName:@"abc.txt" compressionLevel:ZipCompressionLevelBest];
[stream writeData:abcData];
[stream finishedWriting];
Biblioteka umożliwia również do zapoznania się z zawartością pliku „.zip” i wyliczyć pliki zawiera.
Wyświetlanie zawartości pliku ".zip" odbywa się z kodu podobnego do następującego.
ZipFile *unzipFile = [[ZipFile alloc] initWithFileName:@"test.zip" mode:ZipFileModeUnzip];
NSArray *infos = [unzipFile listFileInZipInfos];
for (FileInZipInfo *info in infos) {
NSLog(@"- %@ %@ %d (%d)", info.name, info.date, info.size, info.level);
// Locate the file in the zip
[unzipFile locateFileInZip:info.name];
// Expand the file in memory
ZipReadStream *read = [unzipFile readCurrentFileInZip];
NSMutableData *data = [[NSMutableData alloc] initWithLength:256];
int bytesRead = [read readDataWithBuffer:data];
[read finishedReading];
}
Oto co pracował dla mnie: 1) zlib oparciu Objective-Zip nową lokalizację: https://github.com/gianlucabertani/Objective-Zip
Podfile:
pod 'objective-zip', '~> 1.0'
Krótki przykład:
#import "ViewController.h"
#import "Objective-Zip.h"
@interface ViewController()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSString *docsDir;
NSArray *dirPaths;
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = [dirPaths objectAtIndex:0];
NSString *path = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent:@"test.zip"]];
OZZipFile *zipFile= [[OZZipFile alloc] initWithFileName:path
mode:OZZipFileModeCreate];
NSString *str = @"Hello world";
OZZipWriteStream *stream= [zipFile writeFileInZipWithName:@"file.txt"
compressionLevel:OZZipCompressionLevelBest];
[stream writeData:[str dataUsingEncoding:NSUTF8StringEncoding]];
[stream finishedWriting];
[zipFile close];
}
2) Również inna biblioteka zlib działała dobrze. https://github.com/ZipArchive/ZipArchive
uwaga: czasami jest to potrzebne, aby dodać libz.tbd (nowa nazwa zlib.dylib) na "link binarnych z Biblioteki"
Krótki przykład:
#import "SSZipArchive.h"
...
- (void)viewDidLoad {
[super viewDidLoad];
NSString *docsDir;
NSArray *dirPaths;
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = [dirPaths objectAtIndex:0];
NSError *error;
NSString *str = @"Hello world";
NSString *fileName = [docsDir stringByAppendingPathComponent:@"test.txt"];
BOOL succeed = [str writeToFile:fileName atomically:YES encoding:NSUTF8StringEncoding error:&error];
if (succeed){
NSString *path = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent:@"test.zip"]];
[SSZipArchive createZipFileAtPath:path withFilesAtPaths:@[fileName]];
}
}
- 1. Jak zlib skompresować QByteArray?
- 2. Jak skompresować html za pomocą PlayFramework
- 3. Nodejs wysyła dane w gzip za pomocą zlib
- 4. Jak mogę skompresować rozmiar obrazów GIF za pomocą ImageMagick?
- 5. Jak załadować bitmapę za pomocą Picassa bez użycia ImageView?
- 6. Jak mogę skompresować spakowany plik bez czytania całej jego zawartości?
- 7. Jak skompresować określony plik za pomocą potoku w Django?
- 8. Jak skompresować rozmiar obrazu za pomocą UIImagePNGRepresentation - iOS?
- 9. Jak mogę skompresować HTML w laravel 5
- 10. Czy można używać bezpośredniego wstawiania ścieżek za pomocą JDBC/Java?
- 11. Jak mogę utworzyć system plików przestrzeni użytkownika za pomocą FUSE bez użycia libfuse?
- 12. Jak skompresować rozmiar obrazu?
- 13. Upadek dekompresji zlib
- 14. Jak mogę pogrupować obiekty jQuery bez użycia selektorów?
- 15. Jak mogę skompresować więcej niż dwa iteratory?
- 16. Dostęp do wartości za pomocą indeksów bez użycia sub2ind
- 17. Jak mogę uzyskać dane częstotliwości od PCM za pomocą FFT
- 18. Jak mogę wyodrębnić dane EXIF za pomocą PerlMagick?
- 19. Jak mogę odczytać dane z pliku tekstowego za pomocą VB6?
- 20. Jak mogę zapytać o te dane hierarchiczne za pomocą LINQ?
- 21. Jak mogę wydrukować zawartość zmiennej typu Dane za pomocą Swift?
- 22. Obsługa błędów za pomocą ErrorController zamiast bezpośredniego widoku
- 23. Jak mogę skompresować pliki ZIP/TAR na S3 bez wcześniejszego ich skopiowania na serwer?
- 24. Jak ustawić rodzaj "belongs_to: through" bez ustawienia bezpośredniego belongs_to?
- 25. Jak mogę napisać listę połączeń Erlanga bez użycia modułu list?
- 26. Jak zaimplementować dane wejściowe za pomocą maski
- 27. Dane zagregowane za pomocą ggplot
- 28. Jak mogę skompresować i zaszyfrować duży plik bez korzystania z zewnętrznych bibliotek DLL lub środowisk wykonawczych?
- 29. Uruchamianie pliku JAR bez bezpośredniego wywoływania `java`
- 30. Jak wygląda nagłówek zlib?
Kod znaleziony w zgłoszonym łączu jest bardziej kompletny, ponieważ zawiera również część do obliczenia sumy kontrolnej CRC32. – kiamlaluno
Great thanx. Ponadto może być wymagana zamiana 'inflateInit (& strm)' w '-zlibInflate' na' inflateInit2 (& strm, 16 + MAX_WBITS) 'jeśli otrzymasz' Z_DATA_ERROR' (-3) podczas próby dekompresji plików utworzonych przez zewnętrzne narzędzie. –
Nie znaleziono adresu URL, zaktualizuj link! Wciąż istotne ... –