"Bună, Amigo!"
— Bună, Ellie!
„Astăzi vom studia fluxurile I/O”.
"Da, știu deja totul despre ei. Folosim clasele FileInputStream și FileOutputStream aici."
"Da, și care dintre metodele acestor clase cunoști?"
"Sigur. Iată metodele FileInputStream:"
Metodă | Descriere |
---|---|
int read() |
Citește un octet și îl returnează. |
int read(byte b[]) |
Citește o matrice de octeți și o returnează. |
int read(byte b[], int off, int len) |
Citește o matrice de octeți din flux. |
long skip(long n) |
Omite n octeți, utilizați la citirea din flux. |
int available() |
Returnează numărul de octeți care pot fi încă citiți din flux. |
void close() |
Închide fluxul. |
"La bun sfârșit! Și metodele FileOutputStream?"
„Aruncă o privire:”
Metodă | Descriere |
---|---|
void write(int b) |
Scrie un octet în flux. |
void write(byte b[]) |
Scrie o matrice de octeți în flux. |
void write(byte b[], int off, int len) |
Scrie o matrice de octeți în flux. |
void close() |
Închide fluxul. |
„Amigo, mă surprinzi!”
— Și apoi niște!
„Bine, atunci îți voi oferi două clase noi: ZipInputStream și ZipOutputStream”.
" Zip ? Este ca un fișier zip?"
"Exact. Aceste fluxuri sunt concepute pentru a funcționa cu fișiere zip. Le puteți folosi pentru a citi sau a scrie direct într-un fișier zip!"
"Holy Moly! Ce interesant. Dar un fișier zip poate avea nu un fișier, ci mai multe. Cum funcționează?"
„Pentru asta, există o altă clasă specială: ZipEntry . Prezintă un fișier stocat în arhivă. Puteți citi doar obiecte ZipEntry dintr-un ZipInputStream și puteți scrie doar obiecte ZipEntry într-un ZipOutputStream . Dar se dovedește că puteți citi și scrieți într-un ZipEntry la fel ca un fișier obișnuit."
„Poți să-mi dai un exemplu despre cum funcționează?”
"Desigur. Iată un exemplu în care creăm o arhivă și punem un fișier în ea:"
// 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();
"Ce interesant! Și dezarhivarea fișierelor este la fel de ușor?"
„Da. Iată o scurtă descriere a metodelor claselor ZipEntry , ZipInputStream și ZipOutputStream ”
" ZipInputStream este un flux, astfel încât toate ZipEntry pot fi citite numai secvenţial. Iată metodele sale:"
Metodă | Descriere |
---|---|
ZipEntry getNextEntry() |
Returnează un obiect care descrie următoarea ZipEntry (omite toți octeții din intrarea curentă). |
void closeEntry() |
Închide fluxul de intrare pe ZipEntry curent (omite toți octeții din intrarea curentă). |
int available() |
Returnează 1, există ZipEntries disponibile, în caz contrar 0. |
int read(byte[] b, int off, int len) |
Citește octeți din ZipEntry curent. |
long skip(long n) |
Omite n octeți când citiți din flux. |
void close() |
Închide fluxul. |
— Nu prea înțeleg.
„Cel mai bun lucru de făcut este să vă imaginați că citiți un fișier text, iar ZipEntries sunt ca liniile din fișier. Puteți citi date din linia curentă ( ZipEntry curent) sau puteți sări de la o linie la alta ( getNextEntry , closeEntry ) ."
— Cred că înțeleg, dar nu sunt sigur.
„Iată ZipOutputStream și metodele sale:”
Metodă | Descriere |
---|---|
void setComment(String comment) |
Setează un comentariu asupra arhivei. |
void setMethod(int method) |
Setează metoda de compresie (tip). |
void setLevel(int level) |
Setează nivelul de compresie. Cu cât compresia este mai mare, cu atât merge mai încet. |
void putNextEntry(ZipEntry e) |
Adaugă un nou ZipEntry. |
void closeEntry() |
Închide ZipEntry curent |
void write(byte[] b, int off, int len) |
Scrie un set de octeți în ZipEntry curent. |
void close() |
Închide fluxul. |
„Dar în exemplul de mai sus nu am folosit aproape nimic din toate acestea”.
"Acestea sunt metode opționale. Nu trebuie să specificați nivelul și metoda de compresie - vor fi utilizate setările implicite."
"Hmm. Nu e chiar atât de rău. Și ZipEntry?"
"Sigur. Singurele alte informații dintr-un ZipEntry sunt informațiile de menaj:"
Metodă | Descriere |
---|---|
String getName(), setName(String) |
Fișier de nume intern. |
long getTime(), setTime(long) |
Ultima dată, intrarea a fost modificată. |
long getCRC(), setCRC(long) |
Sumă de control. |
long getSize(), setSize(long) |
Dimensiunea înainte de compresie. |
int getMethod(), setMethod(int) |
Metoda de compresie. |
long get/setCompressedSize() |
Mărimea după fermoar. |
boolean isDirectory() |
Este intrarea un director? |
"Asta nu pare foarte greu. Ce nu este acolo de iubit!"
„Excelent, atunci Diego îți va da sarcini și pe această temă.”
— Ar fi trebuit să-mi țin gura.
GO TO FULL VERSION