"हाय, अमिगो!"

"हाय, एली!"

"आज आम्ही I/O प्रवाहांचा अभ्यास करणार आहोत."

"होय, मला त्यांच्याबद्दल सर्व काही आधीच माहित आहे. आम्ही येथे FileInputStream आणि FileOutputStream वर्ग वापरतो."

"हो, आणि तुम्हाला यापैकी कोणत्या वर्गाच्या पद्धती माहित आहेत?"

"नक्की. येथे फाइलइनपुटस्ट्रीमच्या पद्धती आहेत:"

पद्धत वर्णन
int read() एक बाइट वाचतो आणि परत करतो.
int read(byte b[]) बाइट अॅरे वाचतो आणि परत करतो.
int read(byte b[], int off, int len) प्रवाहातून बाइट अॅरे वाचते.
long skip(long n) प्रवाहातून वाचताना वापरलेले n बाइट्स वगळतात.
int available() प्रवाहातून अद्याप वाचता येऊ शकणार्‍या बाइट्सची संख्या मिळवते.
void close() प्रवाह बंद करतो.

"स्पॉट ऑन! आणि FileOutputStream च्या पद्धती?"

"इथे बघ:"

पद्धत वर्णन
void write(int b) प्रवाहावर एक बाइट लिहितो.
void write(byte b[]) प्रवाहावर बाइट्सचा अ‍ॅरे लिहितो.
void write(byte b[], int off, int len) प्रवाहावर बाइट्सचा अ‍ॅरे लिहितो.
void close() प्रवाह बंद करतो.

"अमिगो, तू मला आश्चर्यचकित!"

"आणि मग काही!"

"ठीक आहे, मग मी तुम्हाला दोन नवीन वर्ग देईन: ZipInputStream आणि ZipOutputStream."

FileInputStream, FileOutputStream, ZipOutputStream, ZipInputStream - 1

" झिप ? ती झिप फाईलसारखी आहे का?"

"नक्कीच. हे प्रवाह zip फाइल्ससह कार्य करण्यासाठी डिझाइन केलेले आहेत. तुम्ही त्यांचा वापर थेट झिप फाइलवर वाचण्यासाठी किंवा लिहिण्यासाठी करू शकता!"

"होली मोली! किती मनोरंजक आहे. पण झिप फाईलमध्ये एक नाही तर अनेक फाइल असू शकतात. ते कसे कार्य करतात?"

"त्यासाठी, आणखी एक विशेष वर्ग आहे: ZipEntry . तो संग्रहात संग्रहित केलेली फाइल सादर करतो. तुम्ही ZipInputStream वरून फक्त ZipEntry ऑब्जेक्ट्स वाचू शकता, आणि ZipEntry ऑब्जेक्ट्स ZipOutputStream वर लिहू शकता . पण असे दिसून आले की तुम्ही वाचू शकता आणि नेहमीच्या फाईलप्रमाणे ZipEntry वर लिहा ."

"ते कसे कार्य करते याचे उदाहरण देऊ शकाल का?"

"अर्थात. येथे एक उदाहरण आहे जिथे आपण संग्रहण तयार करतो आणि त्यात एक फाइल ठेवतो:"

कोड
// 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();

"किती मनोरंजक! आणि फाइल्स अनझिप करणे तितकेच सोपे आहे?"

"होय. येथे ZipEntry , ZipInputStream   आणि ZipOutputStream वर्गांच्या पद्धतींचे संक्षिप्त वर्णन आहे "

" ZipInputStream हा एक प्रवाह आहे, त्यामुळे सर्व ZipEntry फक्त क्रमाने वाचता येतात. त्याच्या पद्धती येथे आहेत:"

पद्धत वर्णन
ZipEntry getNextEntry() पुढील ZipEntry चे वर्णन करणारी ऑब्जेक्ट मिळवते (वर्तमान एंट्रीमधील सर्व बाइट्स वगळते).
void closeEntry() वर्तमान ZipEntry वर इनपुट प्रवाह बंद करते (वर्तमान एंट्रीमधील सर्व बाइट्स वगळते).
int available() रिटर्न 1 तेथे ZipEntry उपलब्ध आहेत, अन्यथा 0.
int read(byte[] b, int off, int len) वर्तमान ZipEntry मधून बाइट्स वाचते.
long skip(long n) प्रवाहातून वाचताना n बाइट्स वगळते.
void close() प्रवाह बंद करतो.

"मला खरंच समजत नाही."

"आपण मजकूर फाईल वाचत असल्याची कल्पना करणे ही सर्वात चांगली गोष्ट आहे आणि ZipEntry फाईलमधील ओळींप्रमाणे आहेत. आपण वर्तमान ओळ (सध्याच्या ZipEntry ) वरून डेटा वाचू शकता किंवा एका ओळीतून दुसर्‍या ओळीत जाऊ शकता ( getNextEntry , closeEntry ) ."

"मला वाटते मला समजले आहे, पण मला खात्री नाही."

"येथे ZipOutputStream आणि त्याच्या पद्धती आहेत:"

पद्धत वर्णन
void setComment(String comment) संग्रहणावर टिप्पणी सेट करते.
void setMethod(int method) कॉम्प्रेशन पद्धत (प्रकार) सेट करते.
void setLevel(int level) कॉम्प्रेशन लेव्हल सेट करते. कॉम्प्रेशन जितके जास्त असेल तितके हळू जाते.
void putNextEntry(ZipEntry e) नवीन ZipEntry जोडते.
void closeEntry() वर्तमान ZipEntry बंद करते
void write(byte[] b, int off, int len) सध्याच्या ZipEntry वर बाइट्सचा संच लिहितो.
void close() प्रवाह बंद करतो.

"परंतु वरील उदाहरणात आम्ही यापैकी जवळजवळ काहीही वापरले नाही."

"या पर्यायी पद्धती आहेत. तुम्हाला कॉम्प्रेशन लेव्हल आणि पद्धत निर्दिष्ट करण्याची गरज नाही-डिफॉल्ट सेटिंग्ज वापरली जातील."

"हम्म. ते इतके वाईट नाही. आणि ZipEntry?"

"नक्कीच. ZipEntry मधील फक्त इतर माहिती म्हणजे हाऊसकीपिंग माहिती:"

पद्धत वर्णन
String getName(), setName(String) अंतर्गत नाव फाइल.
long getTime(), setTime(long) गेल्या वेळी प्रवेशात बदल करण्यात आला होता.
long getCRC(), setCRC(long) चेकसम.
long getSize(), setSize(long) कॉम्प्रेशन करण्यापूर्वी आकार.
int getMethod(), setMethod(int) कॉम्प्रेशन पद्धत.
long get/setCompressedSize() झिप केल्यानंतर आकार.
boolean isDirectory() एंट्री ही निर्देशिका आहे का?

"ते फार कठीण दिसत नाही. प्रेम करायला काय नाही!"

"उत्तम, मग डिएगो तुम्हाला या विषयावर देखील कार्य देईल."

"मी तोंड बंद ठेवायला हवे होते."