"Hai, Amigo!"

"Hai, Elli!"

"Hari ini kita akan mempelajari aliran I/O."

"Ya, saya sudah tahu segalanya tentang mereka. Kami menggunakan kelas FileInputStream dan FileOutputStream di sini."

"Ya, dan metode kelas mana yang kamu tahu?"

"Tentu. Berikut adalah metode FileInputStream:"

metode Keterangan
int read() Membaca satu byte dan mengembalikannya.
int read(byte b[]) Membaca array byte dan mengembalikannya.
int read(byte b[], int off, int len) Membaca array byte dari aliran.
long skip(long n) Melewati n byte, digunakan saat membaca dari aliran.
int available() Mengembalikan jumlah byte yang masih dapat dibaca dari aliran.
void close() Menutup aliran.

"Tepat! Dan metode FileOutputStream?"

"Lihatlah:"

metode Keterangan
void write(int b) Menulis satu byte ke aliran.
void write(byte b[]) Menulis array byte ke aliran.
void write(byte b[], int off, int len) Menulis array byte ke aliran.
void close() Menutup aliran.

"Amigo, kamu mengejutkanku!"

"Dan kemudian beberapa!"

"Baik, kalau begitu saya akan memberi Anda dua kelas baru: ZipInputStream dan ZipOutputStream."

FileInputStream, FileOutputStream, ZipOutputStream, ZipInputStream - 1

" Zip ? Apakah itu seperti file zip?"

"Tepat. Stream ini dirancang untuk bekerja dengan file zip. Anda dapat menggunakannya untuk membaca atau menulis langsung ke file zip!"

"Holy moly! Sangat menarik. Tapi file zip tidak dapat memiliki satu file, tetapi beberapa. Bagaimana cara kerjanya?"

"Untuk itu, ada kelas khusus lain: ZipEntry . Itu menyajikan file yang disimpan dalam arsip. Anda hanya bisa membaca objek ZipEntry dari ZipInputStream , dan Anda hanya bisa menulis objek ZipEntry ke ZipOutputStream . Tapi ternyata Anda bisa membaca dan menulis ke ZipEntry seperti file biasa."

"Bisakah Anda memberi saya contoh cara kerjanya?"

"Tentu saja. Berikut adalah contoh di mana kami membuat arsip dan memasukkan file ke dalamnya:"

Kode
// Create an archive
FileOutputStream zipFile = new FileOutputStream("c:/archive.zip");
ZipOutputStream zip = new ZipOutputStream(zipFile);

//Put a ZipEntry into it
zip.putNextEntry(new ZipEntry("document.txt"));

//Copy the file «document-for-archive.txt» to the archive under the name «document.txt»
File file = new File("c:/document-for-archive.txt");
Files.copy(file.toPath(), zip);

// Close the archive
zip.close();

"Menarik sekali! Dan membuka ritsleting file sama mudahnya?"

"Yap. Ini adalah deskripsi singkat tentang metode kelas ZipEntry , ZipInputStream   dan ZipOutputStream "

" ZipInputStream adalah aliran, jadi semua ZipEntry hanya dapat dibaca secara berurutan. Berikut metodenya:"

metode Keterangan
ZipEntry getNextEntry() Mengembalikan objek yang mendeskripsikan ZipEntry berikutnya (melewati semua byte dalam entri saat ini).
void closeEntry() Menutup aliran masukan pada ZipEntry saat ini (melewati semua byte pada entri saat ini).
int available() Mengembalikan 1 ada ZipEntries tersedia, jika tidak 0.
int read(byte[] b, int off, int len) Membaca byte dari ZipEntry saat ini.
long skip(long n) Melewati n byte saat membaca dari aliran.
void close() Menutup aliran.

"Aku benar-benar tidak mengerti."

"Hal terbaik untuk dilakukan adalah bayangkan Anda sedang membaca file teks, dan ZipEntries seperti baris dalam file. Anda dapat membaca data dari baris saat ini ( ZipEntry saat ini) atau melompat dari baris ke baris ( getNextEntry , closeEntry ) ."

"Kurasa aku mengerti, tapi aku tidak yakin."

"Inilah ZipOutputStream dan metodenya:"

metode Keterangan
void setComment(String comment) Menetapkan komentar pada arsip.
void setMethod(int method) Mengatur metode kompresi (jenis).
void setLevel(int level) Mengatur tingkat kompresi. Semakin tinggi kompresinya, semakin lambat prosesnya.
void putNextEntry(ZipEntry e) Menambahkan ZipEntry baru.
void closeEntry() Menutup ZipEntry saat ini
void write(byte[] b, int off, int len) Menulis satu set byte ke ZipEntry saat ini.
void close() Menutup aliran.

"Tapi dalam contoh di atas kami hampir tidak menggunakan ini."

"Ini adalah metode opsional. Anda tidak perlu menentukan tingkat kompresi dan metode—pengaturan default akan digunakan."

"Hmm. Itu tidak terlalu buruk. Dan ZipEntry?"

"Tentu. Satu-satunya informasi lain di ZipEntry adalah informasi tata graha:"

metode Keterangan
String getName(), setName(String) File nama dalam.
long getTime(), setTime(long) Terakhir kali entri telah diubah.
long getCRC(), setCRC(long) Checksum.
long getSize(), setSize(long) Ukuran sebelum kompresi.
int getMethod(), setMethod(int) Metode kompresi.
long get/setCompressedSize() Ukuran setelah zip.
boolean isDirectory() Apakah entri direktori?

"Kelihatannya tidak terlalu sulit. Apa yang tidak ada untuk dicintai!"

"Bagus, kalau begitu Diego akan memberimu tugas tentang topik ini juga."

"Seharusnya aku tutup mulut."