Dlaczego zwykły plik jar jest skompresowany do 76%, ale po ProGuard zmniejsza się i zaciemnia; jest skompresowany do 102%? Jak naprawić?

-1

Mam plik jar o rozmiarze 392 MB. Zrobiłem jeszcze jedną kopię, więc mam teraz dwie kopie tego samego pliku jar.

Do jednego z nich użyłem 7-zip do kompresji. Jest skompresowany do 76% oryginalnego rozmiaru, czyli 298 MB

Dla drugiego; Najpierw użyłem proGuard, aby go zmniejszyć i zaciemnić. Po zmniejszeniu jego rozmiar spadł do 348 MB. Następnie skompresowałem go za pomocą 7-suwaków. Jest skompresowany do 102% zmniejszonego rozmiaru, czyli 355 MB !!!

Co jest nie tak?
Jak naprawić?

Saleh Feek
źródło
Współczucie opiera się na danych, jeśli nie jest przeznaczone do kompresji (wideo, audio, zaciemnianie), dzieje się tak, nic nie jest złe, działa zgodnie z przeznaczeniem
Ramhound
@Ramhound; oba są tym samym słojem, ale jeden ma dodatkowy krok (zmniejsz i zaciemnij) - to nie zmienia mrówczanu. Wciąż jest to mrówczan słoika - niepokoi mnie to, że nie jest ściśnięty, tak jak nieskurczony, nie zaciemniony !! - OK, więc po prostu wolę wysłać nieskompresowany słoik.
Saleh Feek
3
Dobrze; obwinianie jest winne;
Ramhound,
2
Zgadzam się z @Ramhound, to nie jest już ten sam plik ... został zmieniony, wyczyszczony i zaciemniony, jest inny niż oryginalny plik, nie ma gwarancji, że skompresuje się tak samo jak oryginalny plik, to jest inaczej teraz.
acejavelin
Czy nie byłoby miło móc skompresować plik za pomocą jednej aplikacji, a następnie wziąć to wyjście i skompresować je ponownie, wziąć to wyjście i ponownie skompresować itd., Dopóki plik nie będzie miał tylko 1 bajta? Zarówno kompresja, jak i szyfrowanie mają na celu uczynienie otrzymanych danych losowymi, a ty możesz uzyskać tak losowe. W pewnym momencie zmieniasz chaos.
Ron Maupin,

Odpowiedzi:

1

Zastępując nazwy funkcji prawie losowymi nazwami, a następnie zmieniając wzorce wywoływania funkcji i wstępnie kompresując plik („zmniejszając”) skutecznie usuwasz wszystkie powtarzające się bloki, które algorytm kompresji może zobaczyć i używa do dalszego kompresowania pliku.

Bez powtarzających się bloków w strumieniu danych algorytm kompresji nie może zrobić, aby usunąć zduplikowane bloki, ale przyczyną wzrostu rozmiaru pliku jest to, że metoda kompresji ma swoje własne koszty ogólne, które nakłada na plik wyjściowy. Kompresor będzie miał słownik „fraz” powielonych w pliku, a następnie skompresowany plik jest w zasadzie listą wyszukiwań tego słownika, ale bez duplikatów w pliku słownik staje się kopią oryginalnego pliku i wyszukiwań wciąż tam są, a każdy z nich wskazuje tylko jedną pozycję w słowniku.

Oznacza to, że dla już skompresowanego pliku nie ma możliwości, aby plik wyjściowy był mniejszy niż plik oryginalny. Zawsze kończy się przechowywanie tego, co jest zasadniczo całym plikiem, wraz z tabelą odnośników informującą algorytm dekompresyjny, jak odbudować oryginalny plik.

Mokubai
źródło