"ஹாய், அமிகோ!"

"ஹாய், எல்லி!"

"இன்று நாங்கள் I/O ஸ்ட்ரீம்களைப் படிக்கப் போகிறோம்."

"ஆம், அவர்களைப் பற்றி எனக்கு ஏற்கனவே எல்லாம் தெரியும். நாங்கள் இங்கே FileInputStream மற்றும் FileOutputStream வகுப்புகளைப் பயன்படுத்துகிறோம்."

"ஆமாம், இந்த வகுப்புகளில் எது உங்களுக்குத் தெரியும்?"

"நிச்சயமாக. FileInputStream இன் முறைகள் இங்கே:"

முறை விளக்கம்
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

" ஜிப் ? அது ஜிப் பைல் மாதிரியா?"

"சரியாக. இந்த ஸ்ட்ரீம்கள் ஜிப் கோப்புகளுடன் வேலை செய்யும் வகையில் வடிவமைக்கப்பட்டுள்ளன. ஜிப் கோப்பை நேரடியாகப் படிக்க அல்லது எழுத அவற்றைப் பயன்படுத்தலாம்!"

"ஹோலி மோலி! எவ்வளவு சுவாரஸ்யமானது. ஆனால் ஜிப் கோப்பில் ஒரு கோப்பு இல்லை, பல கோப்புகள் இருக்கலாம். அவை எப்படி வேலை செய்கின்றன?"

"அதற்காக, மற்றொரு சிறப்பு வகுப்பு உள்ளது: 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 வகுப்புகளின் முறைகள் பற்றிய சுருக்கமான விளக்கம் இங்கே உள்ளது "

" ஜிப்இன்புட்ஸ்ட்ரீம் ஒரு ஸ்ட்ரீம், எனவே அனைத்து ஜிப்என்ட்ரியையும் வரிசையாக மட்டுமே படிக்க முடியும். இதோ அதன் முறைகள்:"

முறை விளக்கம்
ZipEntry getNextEntry() அடுத்த ஜிப்என்ட்ரியை விவரிக்கும் ஒரு பொருளை வழங்குகிறது (தற்போதைய உள்ளீட்டில் உள்ள அனைத்து பைட்டுகளையும் தவிர்க்கிறது).
void closeEntry() தற்போதைய ZipEntry இல் உள்ளீட்டு ஸ்ட்ரீமை மூடுகிறது (தற்போதைய உள்ளீட்டில் உள்ள அனைத்து பைட்டுகளையும் தவிர்க்கிறது).
int available() ரிட்டர்ன்ஸ் 1 இல் ZipEntries உள்ளன, இல்லையெனில் 0.
int read(byte[] b, int off, int len) தற்போதைய ZipEntry இலிருந்து பைட்டுகளைப் படிக்கிறது.
long skip(long n) ஸ்ட்ரீமில் இருந்து படிக்கும்போது n பைட்டுகளைத் தவிர்க்கிறது.
void close() ஓடையை மூடுகிறது.

"எனக்கு உண்மையில் புரியவில்லை."

"நீங்கள் ஒரு உரைக் கோப்பைப் படிக்கிறீர்கள் என்று கற்பனை செய்துகொள்வதே சிறந்த விஷயம், மேலும் ஜிப்என்ட்ரிகள் கோப்பில் உள்ள கோடுகள் போன்றவை. தற்போதைய வரியிலிருந்து (தற்போதைய ஜிப்என்ட்ரி ) தரவைப் படிக்கலாம் அல்லது வரியிலிருந்து வரிக்குச் செல்லலாம் ( getNextEntry , closeEntry ) ."

"நான் புரிந்து கொண்டேன் என்று நினைக்கிறேன், ஆனால் எனக்கு உறுதியாக தெரியவில்லை."

"இதோ ZipOutputStream மற்றும் அதன் முறைகள்:"

முறை விளக்கம்
void setComment(String comment) காப்பகத்தில் ஒரு கருத்தை அமைக்கிறது.
void setMethod(int method) சுருக்க முறை (வகை) அமைக்கிறது.
void setLevel(int level) சுருக்க அளவை அமைக்கிறது. அதிக அழுத்தம், மெதுவாக செல்கிறது.
void putNextEntry(ZipEntry e) புதிய ஜிப்என்ட்ரியைச் சேர்க்கிறது.
void closeEntry() தற்போதைய ZipEntry ஐ மூடுகிறது
void write(byte[] b, int off, int len) தற்போதைய ஜிப்என்ட்ரிக்கு பைட்டுகளின் தொகுப்பை எழுதுகிறது.
void close() ஓடையை மூடுகிறது.

"ஆனால் மேலே உள்ள எடுத்துக்காட்டில் நாங்கள் இதைப் பயன்படுத்தவில்லை."

"இவை விருப்ப முறைகள். நீங்கள் சுருக்க நிலை மற்றும் முறையைக் குறிப்பிட வேண்டியதில்லை - இயல்புநிலை அமைப்புகள் பயன்படுத்தப்படும்."

"ம்ம். அது அவ்வளவு மோசம் இல்லை. மற்றும் ஜிப்என்ட்ரி?"

"நிச்சயமாக. ஜிப்என்ட்ரியில் உள்ள ஒரே தகவல் வீட்டு பராமரிப்புத் தகவல்:"

முறை விளக்கம்
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() நுழைவு ஒரு கோப்பகமா?

"அது மிகவும் கடினமாகத் தெரியவில்லை, காதலிக்க என்ன இல்லை!"

"அருமையானது, இந்த தலைப்பில் டியாகோ உங்களுக்கு பணிகளை வழங்குவார்."

"நான் வாயை மூடியிருக்க வேண்டும்."