"வணக்கம், அமிகோ! இன்புட்ஸ்ட்ரீம் மற்றும் அவுட்புட்ஸ்ட்ரீம் எவ்வாறு செயல்படுகின்றன என்பதை இன்று மீண்டும் ஒருமுறை ஆராயப் போகிறோம் . ஆரம்ப விளக்கம் உண்மையில் கொஞ்சம் எளிமையானது. இவை இடைமுகங்கள் அல்ல. அவை சுருக்க வகுப்புகள், மேலும் அவை இரண்டு செயல்படுத்தப்பட்ட முறைகள் கூட. அவர்கள் வைத்திருக்கும் முறைகளைப் பார்ப்போம்:
உள்ளீடு ஸ்ட்ரீம் முறைகள் | முறை என்ன செய்கிறது |
---|---|
|
இந்த முறை, இடையகம் நிரம்பும் வரை அல்லது மூலத்தில் படிக்க எந்த பைட்டுகளும் இல்லாத வரை , இடையக ( பைட் வரிசை ) பைட்டுகளின் தொகுதியை உடனடியாகப் படிக்கும் . இந்த முறை உண்மையில் படித்த பைட்டுகளின் எண்ணிக்கையை வழங்குகிறது (இது வரிசையின் நீளத்தை விட குறைவாக இருக்கலாம்) |
|
இந்த முறை ஒரு பைட்டைப் படித்து அதைத் திருப்பித் தருகிறது. இதன் விளைவாக தோற்றத்திற்கான ஒரு எண்ணாக விரிவுபடுத்தப்படுகிறது. படிக்க இன்னும் பைட்டுகள் இல்லை என்றால், முறை -1 ஐ வழங்குகிறது. |
|
இந்த முறை படிக்காத (கிடைக்கும்) பைட்டுகளின் எண்ணிக்கையை வழங்குகிறது. |
|
இந்த முறை ஸ்ட்ரீமை "மூடுகிறது". நீங்கள் ஸ்ட்ரீமில் வேலை செய்து முடித்ததும் இதை அழைக்கலாம். பின்னர், கோப்பை மூடுவதற்கு தேவையான வீட்டு பராமரிப்பு செயல்பாடுகளை ஆப்ஜெக்ட் செய்கிறது . |
"எனவே நாம் ஒற்றை பைட்டுகள் மட்டுமல்ல, முழு தொகுதிகளையும் படிக்க முடியுமா?"
"சரியாக."
"நாமும் முழுத் தொகுதிகளை எழுதலாமா?"
"ஆம், பாருங்கள்:"
OutputStream முறைகள் | முறை என்ன செய்கிறது |
---|---|
|
இந்த முறை ஒரு பைட்டை எழுதுகிறது. int வகை ஒரு பைட்டாக சுருக்கப்பட்டது. கூடுதல் பகுதி வெறுமனே நிராகரிக்கப்படுகிறது. |
|
இந்த முறை பைட்டுகளின் தொகுதியை எழுதுகிறது. |
|
இந்த முறை பைட்டுகளின் தொகுதியின் ஒரு பகுதியை எழுதுகிறது . பைட் வரிசை முழுமையாக நிரப்பப்படாத சந்தர்ப்பங்களில் இது பயன்படுத்தப்படுகிறது. |
|
இதுவரை எழுதப்படாத எந்தத் தரவையும் ஸ்ட்ரீம் உள்நாட்டில் சேமித்து வைத்திருந்தால், இந்த முறை அதை எழுதும்படி கட்டாயப்படுத்துகிறது. |
|
இந்த முறை ஸ்ட்ரீமை "மூடுகிறது". நீங்கள் ஸ்ட்ரீமில் வேலை செய்து முடித்ததும் இதை அழைக்கலாம். அப்ஜெக்ட் பின்னர் கோப்பை மூடுவதற்கு தேவையான வீட்டு பராமரிப்பு செயல்பாடுகளை செய்கிறது. |
"ஒற்றை பைட்டுகளுக்குப் பதிலாக ஒரே நேரத்தில் முழுத் தொகுதிகளையும் படித்தால் கோப்பு நகலெடுக்கும் குறியீடு எப்படி இருக்கும்?"
"ம்ம். இப்படி ஏதாவது:"
public static void main(String[] args) throws Exception
{
//Create a stream to read bytes from a file
FileInputStream inputStream = new FileInputStream("c:/data.txt");
//Create a stream to write bytes to a file
FileOutputStream outputStream = new FileOutputStream("c:/result.txt");
byte[] buffer = new byte[1000];
while (inputStream.available() > 0) //as long as there are unread bytes
{
//Read the next block of bytes into buffer, and store the actual number of bytes read in count.
int count = inputStream.read(buffer);
outputStream.write(buffer, 0, count); //Write a block (part of a block) to the second stream
}
inputStream.close(); //Close both streams. We don't need them any more.
outputStream.close();
}
"பஃபர் பற்றி எல்லாம் எனக்குப் புரிகிறது, ஆனால் இந்த எண்ணிக்கை மாறி என்ன?"
"ஒரு கோப்பிலிருந்து சமீபத்திய தரவுத் தொகுதியைப் படிக்கும்போது, 1000க்குப் பதிலாக 328 பைட்டுகளைப் பெறலாம். எனவே தரவை எழுதும் போது, நாம் முழுத் தொகுதியையும் எழுதவில்லை என்பதைக் குறிப்பிட வேண்டும்—முதல் 328 மட்டுமே. பைட்டுகள்."
கடைசித் தொகுதியைப் படிக்கும்போது, வாசிப்பு முறை உண்மையில் படித்த பைட்டுகளின் எண்ணிக்கையை வழங்கும். 328ஐப் பெறும்போது, கடைசித் தொகுதியைத் தவிர, ஒவ்வொரு முறையும் ஒரு தொகுதியைப் படிக்கும்போது 1000.
எனவே நாம் ஒரு தொகுதியை எழுதும் போது, இடையகத்தில் உள்ள அனைத்து பைட்டுகளும் வெறும் 328 (அதாவது எண்ணிக்கை மாறியில் சேமிக்கப்பட்ட மதிப்பு) என்று எழுதக்கூடாது என்று குறிப்பிடுகிறோம்.
"இப்போது எல்லாம் தெளிவாகிவிட்டது. நன்றி, எல்லி."
GO TO FULL VERSION