"హలో, అమిగో! ఈరోజు మనం ఇన్పుట్స్ట్రీమ్ మరియు అవుట్పుట్స్ట్రీమ్ ఎలా పని చేస్తాయో మరోసారి తీయబోతున్నాం . ప్రాథమిక వివరణ నిజానికి కొద్దిగా సరళమైనది. ఇవి ఇంటర్ఫేస్లు కావు. అవి అబ్స్ట్రాక్ట్ క్లాస్లు మరియు వాటికి రెండు అమలు చేసిన పద్ధతులు కూడా ఉన్నాయి. వారు కలిగి ఉన్న పద్ధతులను పరిశీలిద్దాం:"
ఇన్పుట్ స్ట్రీమ్ పద్ధతులు | పద్ధతి ఏమి చేస్తుంది |
---|---|
|
ఈ పద్ధతి వెంటనే బఫర్లోకి బైట్ల బ్లాక్ను రీడ్ చేస్తుంది ( బైట్ శ్రేణి ), బఫర్ పూర్తి అయ్యే వరకు లేదా సోర్స్లో చదవడానికి మరిన్ని బైట్లు లేనంత వరకు. ఈ పద్ధతి వాస్తవానికి చదివిన బైట్ల సంఖ్యను అందిస్తుంది (ఇది శ్రేణి పొడవు కంటే తక్కువగా ఉండవచ్చు) |
|
ఈ పద్ధతి ఒక బైట్ని చదివి దాన్ని తిరిగి ఇస్తుంది. ఫలితం చూపుల కోసం పూర్ణాంకానికి విస్తరించబడుతుంది. చదవడానికి ఎక్కువ బైట్లు లేకుంటే, పద్ధతి -1ని అందిస్తుంది. |
|
ఈ పద్ధతి చదవని (అందుబాటులో ఉన్న) బైట్ల సంఖ్యను అందిస్తుంది. |
|
ఈ పద్ధతి స్ట్రీమ్ను "మూసివేస్తుంది". మీరు స్ట్రీమ్తో పని చేయడం పూర్తి చేసినప్పుడు మీరు దీనికి కాల్ చేస్తారు. ఆబ్జెక్ట్ అప్పుడు ఫైల్ను మూసివేయడానికి అవసరమైన హౌస్కీపింగ్ కార్యకలాపాలను నిర్వహిస్తుంది, మొదలైనవి . ఈ సమయంలో, మీరు స్ట్రీమ్ నుండి ఇకపై డేటాను చదవలేరు. |
"కాబట్టి మనం సింగిల్ బైట్లను మాత్రమే కాకుండా, మొత్తం బ్లాక్లను కూడా చదవగలమా?"
"సరిగ్గా."
"మనం కూడా మొత్తం బ్లాకులు వ్రాయవచ్చా?"
"అవును, తనిఖీ చేయండి:"
అవుట్పుట్ స్ట్రీమ్ పద్ధతులు | పద్ధతి ఏమి చేస్తుంది |
---|---|
|
ఈ పద్ధతి ఒక బైట్ను వ్రాస్తుంది. 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