Java mengimplementasikan fungsi dekompresi dan kompresi zip pada dasarnya menggunakan polipeptida Java dan teknologi rekursi, yang dapat memampatkan dan mendekompresi file individu dan folder cascading apa pun, yang merupakan contoh yang sangat baik untuk beberapa pemula.
Zip memainkan dua peran: pengarsipan dan kompresi; GZIP tidak mengarsipkan file, tetapi hanya mengompres satu file. Oleh karena itu, pada platform UNIX, tar perintah biasanya digunakan untuk membuat file arsip, dan kemudian perintah GZIP untuk mengompres file arsip.
Perpustakaan kelas I/O Java juga mencakup beberapa kelas yang dapat membaca dan menulis aliran format terkompresi. Untuk memberikan fungsi kompresi, cukup bungkus di luar kelas I/O yang ada. Kelas -kelas ini bukan pembaca dan penulis, tetapi subclass inputstream dan outstreamput. Ini karena algoritma kompresi ditargetkan pada byte daripada karakter.
Kelas dan antarmuka terkait:
Antarmuka Checksum: Antarmuka yang diimplementasikan oleh kelas ADLER32 dan CRC32
ADLER32: Gunakan algoritma ALDER32 untuk menghitung jumlah checksums
CRC32: Gunakan algoritma CRC32 untuk menghitung jumlah checksums
CheckedInputStream: InputStream Demied Class, Anda dapat memperoleh checksum dari aliran input, yang digunakan untuk memverifikasi integritas data.
CheckedoutputStream: outputStream kelas turunan, Anda dapat memperoleh checksum dari aliran output, digunakan untuk memverifikasi integritas data
DeflaterOutputStream: Kelas dasar dari kelas terkompresi.
ZipOutputStream: Subkelas DeflaterOutputStream yang mengompres data ke dalam format file zip.
GZIPOutputStream: Subkelas DeflaterOutputStream yang mengompres data ke dalam format file GZIP
Inflaterinputstream: kelas dasar untuk dekompresi
ZipInputStream: Subkelas InflaterInputStream, yang dapat mendekompresi data format zip
GzipInputStream: Subkelas InflaterInputStream, yang dapat mendekompresi data format zip
Kelas Zipentry: mewakili entri file zip
Kelas ZipFile: Kelas ini digunakan untuk membaca entri dari file zip
Gunakan zip untuk memampatkan dan mendekompresi beberapa file
Java mendukung perpustakaan ZIP Format dengan cara yang relatif komprehensif, dan perlu menggunakannya untuk mengompres beberapa file ke dalam paket terkompresi. Perpustakaan kelas ini menggunakan format zip standar, sehingga kompatibel dengan banyak alat kompresi.
Kelas ZipoutputStream memiliki set metode kompresi dan level kompresi yang digunakan dalam metode kompresi. zipoutputStream.setMethod (Metode int) Mengatur metode kompresi default yang digunakan untuk entri. Selama metode kompresi tidak ditentukan untuk entri file zip tunggal, metode kompresi yang ditetapkan oleh ZipoutputStream disimpan. Nilai default adalah zipoutputStream.deflated (menunjukkan penyimpanan kompresi) dan juga dapat diatur ke disimpan (menunjukkan hanya penyimpanan arsip paket). Setelah ZipoutputStream telah mengatur metode kompresi untuk dikempiskan, kami dapat menggunakan metode setlevel (level int) lebih lanjut untuk mengatur level kompresi. Nilai level kompresi adalah 0-9, dengan total 10 level (semakin besar nilainya, semakin besar kemungkinan untuk memompres). Defaultnya adalah deflater.default_compression = -1. Tentu saja, kami juga dapat mengatur metode kompresi untuk satu kondisi melalui metode setMethod dari zipentry entri.
Kelas zipentry menjelaskan file terkompresi yang disimpan dalam file zip. Kelas berisi beberapa metode untuk mengatur dan mendapatkan informasi tentang entri ZIP. Kelas zipEntry digunakan oleh zipfile [zipfile.getInputStream (entri zipEntry)] dan zipInputStream untuk membaca file zip, dan zipoutputStream untuk menulis ke file zip. Ada beberapa metode yang berguna: getName () Mengembalikan nama entri, isDirectory () mengembalikan true jika itu adalah entri direktori (entri direktori didefinisikan sebagai entri yang namanya berakhir dengan '/'), setMethod (metode int) mengatur metode kompresi untuk entri, yang dapat zipoutputStream. disimpan atau zipoutputstream. Deflasi.
Dalam contoh berikut, kami menggunakan Toolkit Zip Apache (paketnya adalah Ant.jar), karena tipe Java hadir tidak mendukung jalur Cina, tetapi keduanya digunakan dengan cara yang sama, tetapi alat kompresi Apache memiliki lebih banyak antarmuka untuk mengatur metode pengkodean, dan yang lain pada dasarnya sama. Selain itu, jika Anda menggunakan org.apache.tools.zip.zipoutputStream untuk mengompres, kami hanya dapat menggunakan org.apache.tools.zip.zipentry untuk mendekompresi, dan tidak dapat menggunakan java.util.zip.zipinputstream untuk mendekompresi dan membaca. Tentu saja, Apache tidak menyediakan kelas ZipInputStream.
Kompresi File:
Paket Gizaction; impor java.io. *; impor java.util.zip. *;/** * @author Dana ・ li * <p> * Program ini mengimplementasikan kompresi zip [kompresi] * <p> * Fungsi umum termasuk Cane Compress dan Decursion A Anypress dan Teknologi Inti Single dan DECURPE POLED dan TEKNOLA DECURING APA PUN dan TEKNOLOGI LAINNYA. Jalur input sumber dan jalur output target perlu disesuaikan dalam kode. * <p> * Di bagian kode ini, bagian kompresi diimplementasikan */kelas publik zipcompressing {private int k = 1; // Tentukan variabel bilangan rekursive void void zip (string zipfileName, file inputFile) melempar pengecualian {system.out.println ("compressing ..."); ZipOutputStream out = new ZipoutputStream (FileOutputStream baru (ZipFileName)); BufferedOutputStream BO = BufferedOutputStream baru (out); zip (out, inputFile, inputFile.getName (), bo); bo.close (); out.close (); // aliran output tutup system.out.println ("kompresi selesai"); } private void zip (zipoutputStream out, file f, basis string, bufferedoutputStream bo) melempar pengecualian {// metode kelebihan muatan if (f.isdirectory ()) {file [] fl = f.listFiles (); if (fl.length == 0) {out.putNextEntry (new zipentry (base + "/")); // Buat Sistem Basis Titik Masuk Kompresi Zip.out.println (base + "/"); } untuk (int i = 0; i <fl.length; i ++) {zip (out, fl [i], base + "/" + fl [i] .getName (), bo); // secara rekursif melintasi subfolder} system.out.println ("th" + k + "sub-recursive"); K ++; } else {out.putNextEntry (zipEntry baru (base)); // Buat Sistem Basis Titik Masuk Kompresi Zip.out.println (basis); FileInputStream di = FileInputStream baru (f); BufferedInputStream Bi = BufferedInputStream baru (IN); int b; while ((b = bi.read ())! = -1) {bo.write (b); // Tulis aliran byte ke direktori zip saat ini} bi.close (); melampirkan(); // Stream Input Tutup}}/ *** tes* @param args*/ public static void main (string [] args) {zipcompressing book = new zipcompressing (); coba {book.zip ("f: //ziptest.zip", file baru ("f: // ziptest")); } catch (Exception e) {E.PrintStackTrace (); }}}File Decompression:
Paket Gizaction; impor java.io.bufferedInputStream; impor java.iufferedoutputstream; import java.io.file; impor java.io.fileinputStream; impor java.io.filenotfoundexception; impor java.io.fileoutputstream; impor java. java.util.zip.zipentry; impor java.util.zip.zipinputStream;/** * @author Dana ・ li * <p> Program ini mengimplementasikan dekompresi dan dekompresi yang dikendekasikan, dan fungsi-fungsi yang dapat dikembangkan, coscon, dan fungsi-fungsi yang dapat dikendalikan oleh compresi, coscon, coscon, coscon, dan menggunakan caspresi, COPRESSION PENGGUNAAN KOMPRESSION, KOPRESSI POBERSI, KOPRESSI PERUSANAAN, KOPRESSI PERUSANAAN YAVA, KOPRESSI PERUSANAAN YAVA, KOPRESSI PERUSANAAN YAVA, KOPRESSI PERUSANAAN YAVA, folder. Jalur input sumber dan jalur output target perlu disesuaikan dalam kode. * <p> * Dalam kode ini, bagian dekompresi diimplementasikan; */ kelas publik zipdecompressing {public static void main (string [] args) {// todo Metode yang dihasilkan secara otomatis stub lama start waktu = system.currentTimeMillis (); coba {zipInputStream zin = new zipInputStream (fileInputStream baru ("f: //ziptest.zip")); // input sumber zip bufferedInputStream bin = baru bufferedInputStream (zin); String parent = "f: // ziptest //"; // jalur output (direktori folder) file fout = null; Entri zipentry; coba {while ((entri = zin.getNextEntry ())! = null &&! Entry.isDirectory ()) {fout = file baru (parent, entri.getName ()); if (! fout.exists ()) {(file baru (fout.getParent ())). mkdirs (); } FileOutputStream out = FileOutputStream baru (fout); BufferedOutputStream Bout = baru bufferedOutputStream (out); int b; while ((b = bin.read ())! =-1) {bout.write (b); } Bout.close (); out.close (); System.out.println (fout+"Decompression berhasil"); } Bin.close (); Zin.close (); } catch (ioException e) {e.printstacktrace (); }} catch (FileNotFoundException e) {e.printstacktrace (); } long endtime = system.currentTimeMillis (); System.out.println ("Memakan waktu:"+(endtime-starttime)+"ms"); }}Mengompres satu file dengan GZIP
Antarmuka GZIP relatif sederhana, jadi jika Anda hanya perlu mengompres aliran, Anda dapat menggunakannya. Tentu saja dapat memampatkan aliran karakter dan memampatkan aliran byte. Di bawah ini adalah file teks yang mengompres format pengkodean GBK.
Penggunaan kelas kompresi sangat sederhana; Cukup gunakan GzipoutputStream atau ZipoutputStream untuk membungkus aliran output, dan kemudian gunakan GzipInputStream atau ZipInputStream untuk membungkus aliran input. Sisanya adalah operasi I/O biasa.
impor java.io.bufferedoutputStream; import java.io.bufferedReader; impor java.io.fileInputStream; import java.io.fileoutputStream; impor java.io.ioException; impor java.inputstreamReader; impor java.util.zip.gutzipstream; impor java.util.zip.zip.gutzipstream; java.util.zip.gzipoutputStream; kelas publik gzipcompress {public static void main (string [] args) melempar ioException {// bersiap untuk mengompres file karakter. Perhatikan bahwa file karakter di sini adalah pengkode GBK BufferedReader di = BufferedReader baru (inputStreamReader baru (FileInputStream baru ("e: /tmp/source.txt"), "gbk")); // Gunakan gzipoutputStream untuk membungkus aliran outputStream untuk membuat karakteristik kompresi spesifiknya, dan akhirnya paket kompresi test.txt.gz akan dihasilkan // dan ada file bernama test.txt di TI BufferedOutputStream out = new bufferedOutputStream (GZIPOutputStream baru (FileOutputStream ("Test.txt.tx (" GZIPOutputStream ("baru (" test.txt.tx ("gzipoutputStream (" new FileOutStream ("test.txt.tx. System.out.println ("Mulai Menulis File Terkompresi ..."); int c; while ((c = in.read ())! = -1) { / * * Catatan, berikut adalah file karakter yang dibaca dalam stream karakter, dan C tidak dapat disimpan secara langsung, karena C sudah menjadi kode unicode *, yang akan kehilangan informasi (tentu saja, format pengkodean itu sendiri salah), jadi harus diselesaikan dengan GBK dan kemudian disimpan. */ out.write (string.valueof ((char) c) .getBytes ("gbk")); } in.close (); out.close (); System.out.println ("Mulai Membaca File Terkompresi ..."); // Gunakan GzipInputStream untuk membungkus aliran InputStream untuk membuatnya didekompresi bufferedReader in2 = BufferedReader baru (inputStreamReader baru (GzipInpinputStream baru (FileInputStream baru ("test.txt.gz")), "GBK")); String s; // Baca konten dalam file terkompresi while ((s = in2.readline ())! = Null) {System.out.println (s); } in2.close (); }}Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.