Java реализует функции декомпрессии и сжатия молнии и в основном использует полипептиды Java и технологию рекурсии, которая может сжать и декомпрессировать отдельные файлы и любые каскадные папки, что является очень хорошим примером для некоторых начинающих.
Zip играет две роли: архивирование и сжатие; GZIP не архивирует файлы, но сжимает только один файл. Поэтому на платформах UNIX командный смол обычно используется для создания архивного файла, а затем командует GZIP для сжатия архивного файла.
Библиотека классов ввода/вывода Java также включает в себя некоторые классы, которые могут читать и писать потоки сжатого формата. Чтобы обеспечить функции сжатия, просто оберните их за пределы существующих классов ввода -вывода. Эти классы не читают и писатель, а подклассы InputStream и Outstreamput. Это связано с тем, что алгоритм сжатия нацелен на байт, а не на символы.
Связанные классы и интерфейсы:
Интерфейс контроля: интерфейс, реализованный классами Adler32 и CRC32
ADLER32: Используйте алгоритм Alder32 для расчета количества контрольных комплексов
CRC32: Используйте алгоритм CRC32 для расчета количества контрольной суммы
CHECKEDINPUTSTREAM: CONPUTSTREAM, полученный класс, вы можете получить контрольную сумму входного потока, которая используется для проверки целостности данных.
CheckedOutputStream: LeveltStream, полученный класс, вы можете получить контрольную сумму выходного потока, используемой для проверки целостности данных
DeflaterOutputStream: базовый класс сжатого класса.
ZipoutputStream: подкласс DeflaterOutputStream, который сжимает данные в формат файла ZIP.
Gzipoutputstream: подкласс DeflaterOutputStream, который сжимает данные в формат файла GZIP
InflaterinPutStream: базовый класс для декомпрессии
ZipinputStream: подкласс InflaterinPutStream, который может декомпрессировать данные формата ZIP
Gzipinputstream: подкласс InflaterinPutStream, который может декомпрессировать данные формата ZIP
Класс Zipentry: представляет запись zip -файла
Класс Zipfile: этот класс используется для чтения записей из файлов ZIP
Используйте ZIP для сжатия и декомпрессии нескольких файлов
Java поддерживает библиотеку форматов ZIP относительно всеобъемлющим образом, и необходимо использовать ее для сжатия нескольких файлов в сжатый пакет. Эта библиотека классов использует стандартный формат ZIP, поэтому он совместим со многими инструментами сжатия.
Класс ZipoutputStream имеет набор методов сжатия и уровень сжатия, используемый в методе сжатия. zipoutputstream.setmethod (метод int) Устанавливает метод сжатия по умолчанию, используемый для записей. Пока метод сжатия не указан для одного ввода Zip -файла, хранится метод сжатия Zipoutputstream. Значение по умолчанию - zipoutputstream.deflated (указывает хранилище сжатия), а также может быть установлено (указывает только хранилище архива пакета). После того, как ZipOutputStream установил метод сжатия для сдушения, мы можем дополнительно использовать метод Setlevel (int Level) для установки уровня сжатия. Значение уровня сжатия составляет 0-9, в общей сложности 10 уровней (чем больше значение, тем больше вероятность сжатия). По умолчанию defflater.default_compression = -1. Конечно, мы также можем установить метод сжатия для одного условия с помощью метода SetMethod inpentry.
Класс Zipentry описывает сжатый файл, хранящийся в zip -файле. Класс содержит несколько методов для настройки и получения информации о записях ZIP. Класс Zipentry используется Zipfile [Zipfile.getInputStream (Zipentry intry)] и ZipinputStream для чтения файла Zip, а ZipOutputStream для записи в файл Zip. Существуют некоторые полезные методы: getName () возвращает имя записи, iSdirectory () возвращает true, если это запись в каталоге (запись каталога определяется как запись, имя которого заканчивается '/'), SetMethod (Int Method) устанавливает метод сжатия для записи, который может быть zipoutputStream.sterested или ZipoutputeReam.
В следующем примере мы использовали инструментарий Zip Zip Apache (пакет ant.jar), потому что тип Java поставляется с ним, не поддерживает китайские пути, но оба используются одинаково, но инструмент сжатия Apache имеет больше интерфейсов для установки методов кодирования, а другие в основном одинаковы. Кроме того, если вы используете org.apache.tools.zip.zipoutputstream для сжатия, мы можем использовать только org.apache.tools.zip.zipentry для распадки и не можем использовать java.util.zip.zipinputstream для декомпрессии и чтения. Конечно, Apache не предоставляет класс ZipinputStream.
Сжатие файла:
Gizaction; импорт java.io. *; импортировать java.util.zip. *;/** * @author dana ・ li * <p> * Программа реализует сжатие Zip [сжатие] * <p> * Общие функции включают в себя использование полиморфизма, рецепции и других технологий ядра Java, которые могут скомпрессировать и декомплектовать сбыт и любой файл и любые файлы. Путь ввода источника и путь целевого вывода необходимо настроить в коде. * <p> * В этом разделе кода реализована часть сжатия */public class Zipcompressing {private int k = 1; // Определите переменную рекурсивного числа private void Zip (строка Zipfilename, файл inputfile), бросает исключение {System.out.println ("сжатие ..."); Zipoutputstream out = new ZipOutputStream (new FileOutputStream (ZipFileName)); BufferedOutputStream bo = new BufferedOutputStream (Out); Zip (Out, InputFile, inputFile.getName (), bo); bo.close (); out.close (); // выходной поток Close System.out.println ("сжатие завершено"); } private void Zip (ZipOutputStream Out, файл f, строка, BufferedOutputStream BO) бросает Exception {// Метод перегрузка if (f.isdirectory ()) {file [] fl = f.listfiles (); if (fl.length == 0) {out.putnextentry (new zipentry (base + "/")); // Создать базовую систему ввода сжатия ZIP.out.println (base + "/"); } for (int i = 0; i <fl.length; i ++) {Zip (out, fl [i], base + "/" + fl [i] .getName (), bo); // рекурсивно Траверсированные подпапки} System.out.println ("th" + k + "suberecurive"); K ++; } else {out.putnextentry (new Zipentry (base)); // Создать базовую систему ввода сжатия ZIP.out.println (base); FileInputStream in = new FileInputStream (f); BufferedInputStream bi = new BufferedInputStream (in); int b; while ((b = bi.read ())! = -1) {bo.write (b); // Напишите поток байта в текущий Zip Directory} bi.close (); in.close (); // Входной поток Close}}/ *** test* @param args*/ public static void main (string [] args) {Zipcompressing book = new ZipCompressing (); try {book.zip ("f: //ziptest.zip", новый файл ("f: // ziptest")); } catch (Exception e) {e.printstackTrace (); }}}Файл декомпрессия:
Gizaction; Import Java.io.BufferedInputStream; Import Java.io.BufferedOutputStream; импорт java.io.file; импорт java.io.fileinputstream; импорт java.io.filenotfoundexception; импорт java.io.fileoutputerem; import java. java.util.zip.zipinputStream;/** * @author dana ・ li * <p> * Программа реализует декомпрессию Zip [декомпрессия] * <p> * Общие функции включают в себя использование полиморфных и рекурсионных технологий ядра Java, которые могут сжать и декотомные отдельные файлы и любые каскадирующие скидки. Путь ввода источника и путь целевого вывода необходимо настроить в коде. * <p> * В этом коде реализуется декомпрессионная часть; */ public class Zipdecompressing {public static void main (string [] args) {// todo Автогенерированный метод заглушка long starttime = System.currentTimeMillis (); try {zipinputStream Zin = new ZipinputStream (new FileInputStream ("f: //ziptest.zip")); // Входной источник Zip Path BufferedInptream bin = new BufferedInptream (Zin); String parent = "f: // Ziptest //"; // выходной путь (каталог папок) файл fout = null; Вход на Zipentry; try {while ((entry = zin.getNextEntry ())! = null &&! entry.isDirectory ()) {fout = new File (parent, entry.getName ()); if (! fout.exists ()) {(новый файл (fout.getParent ())). mkdirs (); } FileOutputStream Out = new FileOutputStream (fout); BufferedOutputStream Bout = new BufferedOutputStream (Out); int b; while ((b = bin.read ())! =-1) {bout.write (b); } Bout.close (); out.close (); System.out.println (Fout+"Декомпрессия успешно"); } Bin.close (); Zin.close (); } catch (ioException e) {e.printstackTrace (); }} catch (filenotfoundexception e) {e.printstacktrace (); } long EndTime = System.CurrentTimeMiLlis (); System.out.println ("Труто-потребляющий:"+(endtime-starttime)+"ms"); }}Сжатие одного файла с помощью GZIP
Интерфейс Gzip относительно прост, поэтому, если вам нужно только сжать поток, вы можете использовать его. Конечно, он может сжимать потоки символов и сжатые байтовые потоки. Ниже приведен текстовый файл, который сжимает формат кодирования GBK.
Использование классов сжатия очень просто; Просто используйте gzipoutputstream или zipoutputstream, чтобы обернуть выходной поток, а затем используйте gzipinputstream или zipinputstream, чтобы обернуть входной поток. Остальные являются обычными операциями ввода -вывода.
Импорт java.io.bufferedoutputstream; import java.io.bufferedReader; импорт java.io.fileinputstream; import java.io.fileOutputStream; импорт java.io.ioexception; импорт java.io.inputStreamReader; импорт java.Util.zip.gzipinpurem; java.util.zip.gzipoutputstream; public class gzipcompress {public static void main (string [] args) бросает ioException {// подготовка к сжатию файла символа. Обратите внимание, что файл символов здесь представляет собой BufferedReader in = new BufferedReader кодирования GBK (New InputStreamReader (новый файл pileinputStream ("e: /tmp/source.txt"), "gbk")); // Использование GzipOutputStream для обертывания потока OutputStream для создания его конкретных характеристик сжатия, и, наконец, будет создан пакет сжатия test.txt.gz //, и есть файл с именем test.txt в IT BufferedOutputStream Out = new BufferedOutputStream (New GzipoutputStream (newAoutputStream ("test.txt.gzz"); System.out.println («Начните писать сжатые файлы ...»); int c; while ((c = in.read ())! = -1) { / * * Примечание, вот файл символов, который читается в потоках символов, и C не может быть непосредственно храниться, поскольку C уже является Unicode * Code, который потеряет информацию (конечно, сам формат кодирования неверно), поэтому его необходимо решить с помощью GBK, а затем хранятся. */ out.write (string.valueof ((char) c) .getbytes ("gbk")); } in.close (); out.close (); System.out.println ("Начните читать сжатый файл ..."); // Использовать gzipinputStream для обертывания потока InputStream, чтобы сделать его декомпрессированный BufferedReader In2 = новый BufferedReader (новый inputStreamReader (новый gzipinputStream (новый FileInputStream ("test.txt.gz")), "gbk")); Строка S; // Читать содержимое в сжатом файле while (s = in2.readline ())! = Null) {System.out.println (s); } in2.close (); }}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.