– Szia Amigo!

– Szia, Ellie!

"Ma az I/O adatfolyamokat fogjuk tanulmányozni."

"Igen, már mindent tudok róluk. Itt a FileInputStream és a FileOutputStream osztályokat használjuk."

– Igen, és ezek közül az osztályok közül melyik módszerét ismeri?

"Persze. Itt vannak a FileInputStream metódusai:"

Módszer Leírás
int read() Beolvas egy bájtot, és visszaadja.
int read(byte b[]) Beolvas egy bájttömböt, és visszaadja.
int read(byte b[], int off, int len) Egy bájttömböt olvas be az adatfolyamból.
long skip(long n) n bájtot kihagy, az adatfolyamból történő olvasáskor használatos.
int available() Az adatfolyamból még olvasható bájtok számát adja vissza.
void close() Bezárja a patakot.

"Rendben! És a FileOutputStream módszerei?"

"Nézd meg:"

Módszer Leírás
void write(int b) Egy bájtot ír a folyamba.
void write(byte b[]) Egy bájttömböt ír az adatfolyamba.
void write(byte b[], int off, int len) Egy bájttömböt ír az adatfolyamba.
void close() Bezárja a patakot.

– Amigo, meglepsz!

"Majd néhány!"

"Rendben, akkor adok neked két új osztályt: ZipInputStream és ZipOutputStream."

FileInputStream, FileOutputStream, ZipOutputStream, ZipInputStream - 1

" Zip ? Ez olyan, mint egy zip-fájl?"

"Pontosan. Ezeket a streameket úgy tervezték, hogy zip fájlokkal működjenek. Használhatja őket olvasásra vagy írásra közvetlenül egy zip fájlba!"

"Holy Moly! Milyen érdekes. De egy zip fájlban nem egy fájl lehet, hanem több. Hogyan működnek?"

"Ehhez van egy másik speciális osztály: ZipEntry . Az archívumban tárolt fájlt jeleníti meg . ZipEntry objektumokat csak ZipInputStreamből olvashat , ZipEntry objektumokat pedig csak ZipOutputStreambe írhat . De kiderül, hogy olvasni és úgy írjon egy ZipEntry- be , mint egy normál fájlba."

– Mondana egy példát, hogyan működik?

"Természetesen. Íme egy példa, amikor létrehozunk egy archívumot, és belehelyezünk egy fájlt:"

Kód
// 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();

"Milyen érdekes! És a fájlok kicsomagolása ugyanolyan egyszerű?"

"Igen. Itt van egy rövid leírás a ZipEntry , ZipInputStream   és ZipOutputStream osztályok metódusairól "

" A ZipInputStream egy adatfolyam, így az összes ZipEntry csak szekvenciálisan olvasható. Íme a módszerei:"

Módszer Leírás
ZipEntry getNextEntry() Egy objektumot ad vissza, amely leírja a következő ZipEntry bejegyzést (kihagyja az összes bájtot az aktuális bejegyzésben).
void closeEntry() Bezárja az aktuális ZipEntry bemeneti adatfolyamát (az aktuális bejegyzésben lévő összes bájtot kihagyja).
int available() 1-et ad vissza, ZipEntries elérhető, egyébként 0.
int read(byte[] b, int off, int len) Bájtokat olvas be az aktuális ZipEntry-ből.
long skip(long n) n bájtot kihagy az adatfolyamból való olvasáskor.
void close() Bezárja a patakot.

– Nem igazán értem.

"A legjobb, ha elképzeli, hogy szöveges fájlt olvas, és a ZipEntries olyan, mint a fájl sorai. Olvashat adatokat az aktuális sorból (az aktuális ZipEntry), vagy sorról sorra ugorhat ( getNextEntry , closeEntry ) ."

– Azt hiszem, értem, de nem vagyok benne biztos.

"Íme a ZipOutputStream és a módszerei:"

Módszer Leírás
void setComment(String comment) Megjegyzést állít be az archívumhoz.
void setMethod(int method) Beállítja a tömörítési módot (típust).
void setLevel(int level) Beállítja a tömörítési szintet. Minél nagyobb a tömörítés, annál lassabban megy.
void putNextEntry(ZipEntry e) Új ZipEntry bejegyzést ad hozzá.
void closeEntry() Bezárja az aktuális ZipEntry-t
void write(byte[] b, int off, int len) Egy bájtkészletet ír az aktuális ZipEntry-be.
void close() Bezárja a patakot.

"De a fenti példában ebből szinte semmit sem használtunk."

"Ezek nem kötelező módszerek. Nem kell megadnia a tömörítési szintet és módszert – a rendszer az alapértelmezett beállításokat használja."

"Hmm. Ez nem is olyan rossz. És a ZipEntry?"

"Persze. A ZipEntry egyetlen további információja a háztartási információ:"

Módszer Leírás
String getName(), setName(String) Belső névfájl.
long getTime(), setTime(long) Legutóbb a bejegyzés módosult.
long getCRC(), setCRC(long) Ellenőrző összeg.
long getSize(), setSize(long) Méret tömörítés előtt.
int getMethod(), setMethod(int) Tömörítési módszer.
long get/setCompressedSize() Méret cipzár után.
boolean isDirectory() A bejegyzés egy könyvtár?

"Ez nem tűnik túl nehéznek. Mit nem lehet szeretni!"

– Remek, akkor Diego ebben a témában is ad feladatokat.

– Be kellett volna tartanom a számat.