 اسلام علیکم، today's لیکچر No.35 of our course CS201 Introduction to Programming لگتا ہے کہ کلکوز کے شروع سے لے کے اب تک ہم نے بہت سارہ صفر تی کر لیا لیکن ایک ایسی چیز ہے جو کہ ہم نے تقریباہن پہلے دن سے اس کی بات کرنے شروع کیا اور استعمال کرنا شروع کیا لیکن اس کی کوئی ڈیٹیلڈ ڈیسکشن نہیں کی اس کے مجھے جو اس کی انپرٹ آسکتا ہے اس کے اندر جو اس کی انپرٹ آٹپٹ سسٹم تھا اس کے اندر سپیسیفک کچھ موجود تھے سیکنیف اور پرنٹ ٹیف زیادہ ڈار استعمال ہوتے تھے اور اس کے اندر ہمیں بتانا پڑتا تھا کیسم کا ڈیٹا ہم پڑھرہے ہیں اور پھر کس ویریہبل میں اس کو ڈالنا ہے سٹیمز جو ہیں وہ سی پلس پلس کا کانٹہ پارٹ ہیں یعنی اس کے جو Provide کرتا ہے Input Output System سی پلس پلس کے اندر ان کو ہم سٹیمز کہتے ہیں. سٹیم ہے کیا چیز؟ As the name implies it is a stream of bytes. دیکھیں بگیننگ سے میں آپ کو بتاتا گیا ہوں کہ جی اس وقت آپ اس کو ایک دروازہ سمجھ لیں ٹھیک ہے نا اس like a door through which our program can communicate with the outside world. اگر ہم نے کوئی دیتا انپوٹ کرنا ہوتا ہے کیبوڑ سے تو ہم see in کی stream استعمال کرتے ہیں وہ کیبوڑ کو پڑھ کے کسی ویریبرل کے اندر دیتا سٹور کر لیتا ہے اگر ہم نے دیتا output display کرنا ہے سکرین کے اوپر تو ہم see out کی مدد لیتے رہے ہیں. وہ دروازہ کا مطلب اگزامپل کیا بنتا ہے؟ think of it this way. آپ بیٹے ہوئے کلاس کے اندر یا اوریٹوریم کے اندر آپ ہمارا یہ لیکچر دیکھ رہے ہیں. اگر میں کہوں کہ جی آپ باہر نکلیں کلاس سے باہر آجائیں تو how would you do it? you would get up from your seats you would walk to the door but you can see جی سارے ایک وقت میں دروازہ سے باہر نہیں نکل سکتے ہیں. آپ ایک ایک کر کے دروازہ سے باہر نکلیں گے یا counter part اگر آپ نے کمرے میں داخل ہونا ہو تو ایک ایک کر کے داخل ہو گے اور پھر اس کے اندر جو بھی سیٹیں لگی ہوں ان کے اوپر آپ بیٹھ جاتے ہیں. so in a way you're already forming a sequence of people in this case. سٹرین جو ہے it is a sequence of bytes it is an ordered sequence ordered sequence دروازے کے ساتھ پھر آپ اس کا ایک سامپل کمپیر کر لیں کہ جو شخص دروازے میں داخل ہوتا ہے وہی دروازے سے پہلے باہر نکلے گا جو اس کے پیچھے داخل ہوگا وہ اس کے بعد دروازے میں سے باہر نکلے گا so streams بھی جو ہے وہ ordered sequence ہے جو چیز پہلے سٹرین کے اندر داخل ہوگی وہی دوسی سائٹ پہ پہلے نکلے گی so you should think of a stream as an ordered sequence of bytes a bytes کیا ہم بات کرتے ہیں کہ جی this is a unit of measure اور ہم نے پیچھے یہ بھی دسکس کیا تھا کہ جی ایک byte جو ہے وہ رفلی ایک character کو سٹور کرنے کی سلاحیت رکھتی ہے so one of our characters is stored in a byte so you can think of an ordered sequence of bytes being an ordered sequence of characters now as human beings ہم تو English کے اندر کیبورڈ کے ساتھ کمیونکیٹ کرتے ہیں اپنے programs کے ساتھ so we are typing abc012 these are all characters جب یہی character ہمارے program کے اندر پہنچتے ہیں تو ہم ان کو سٹور کرتے ہیں کنی variables کے اندر کسی data types کے اندر maybe even in some of our objects there is a conversion going on ہم نے تو کیبورڈ پہ ایکہ character تیپ کیا اندر یہ ایک character variable let us see اس کے اندر سٹور ہو گیا تو وہ اپس میں link کیسے بنا یہ link جو ہے یہ see in کی stream کے ساتھ بن رہا ہے کہ stream میں آپ سمجھ لیے ایک pipe ہے یا وہ ایک دروازہ ہے ایک طرف سے کیبورڈ سے ایک character داخل ہوا درمیان میں اس کی کوئی conversion ہو گئی ہے conversion ہوئی ہے into the internal binary representation of the character which is then stored in the character variable جس کو ہم نے نام see دیا ہوئے so there is an implicit conversion happening the same thing happens اگر میرے پاس ایک integer آئی ہے اور میں کیبورڈ سے one کا نمبر دباتا ہوں تو one کا جو digit ہے وہ as a character ڈیجٹا ہے لیکن اندر جاکے as a number ڈیجٹا ہو جاتا ہے now you have to be careful about this concept دیکھے when we spoke about the as کی تیبل اس وقت بھی ہم نے بات کی تھی کہ کیبورڈ کے اوپر alphabet بھی ہے symbols بھی ہیں greater than less than plus minus divide ڈیجٹا اور numbers بھی ہیں zero one two بلکہ numbers تو کیبورڈ پہ دو جگوں پہ آتے ہیں آپ دیکھیں گے ایک اوپر والی row ہے اور ایک right side کے اوپر keypad بھی بنا ہوئے calculator کی طرح اس پہ بھی numbers لکھے ہوئے جب آپ ایک number کی key دباتے ہیں کیبورڈ پہ تو کیا کمپیوٹر میں ایک number جاتا ہے یا ایک general sense کے اندر character جاتا ہے کیا خیال ہے the answer is that when you press a key on the key board a character sequence is generated which goes into the computer now when I say a character sequence I don't mean a sequence of characters what I mean is کہ کوئی code جو ہے وہ کمپیوٹر کے اندر travel کرتا ہے جب ہم کوئی key دباتے ہیں کیبورڈ پہ یہ code وہی ہے جو ہم نے بات کی تھی as کی code کی so it is a binary representation of a character اب ایکہ بھی ایک binary representation ہے b کے لیے بھی ایک binary representation ہے اسی طریقے سے 0 1 2 وغیرہ کے لیے بھی ایک binary representation ہے یہ نہیں مطلب کہ جو one کی for example binary representation ہے اس کی numeric value بھی one ہوگی no اس کی اگر as کی table دیکھیں اور اگر آپ نے وہ program لکھا تھا you will find کہ جی one کی تو کوئی special binary value ہے which represents the character one and so on for 2 3 4 or 0 any number on the keyboard when you press the key اس کی اپنی as کی representation in a binary code یہ کمپیوٹر کے اندر جاتی ہے لیکن اگر ہم stream operator یعنی see ان کو کہیں کہ جناب keyboard کو پڑھکے جو number type کیا جا رہا ہے اس کو ایک integer variable کے اندر store کر دو تو اس کی binary representation کو بھول جاتا ہے اور اس کی value کو store کیا جاتا ہے so see in is performing this transforming operation so it's taking a character as کی code and knows that it is supposed to represent the number and it will convert it into the appropriate number and put it into the integer variable called i what happens اگر ہم see ان کو ہی کہیں کہ جناب ایک value پڑھو کیبوٹ کو or this integer variable میں store کر دو لیکن ہم 012 والی کی دبانی کے بجائے کوئی abc والی کی دبادیں تو کوئی نہ کوئی ارر بھی ہو سکتا ہے so see in جو stream ہے اس کے اندر یہ بھی possibility ہے کہ we can detect if an error occurred let us look at this collection of classes which is the input and output classes یہ objects ہیں ان کے methods بھی ہیں ان کے functions بھی ہیں and their functions and methods اس کو see plus plus میں ہم stream input output کہتے ہیں جو most common دو چیزیں ہم اب تک استمال کرتے آئے ہیں وہ ہے see in input حاصل کرنے کے لیے کیبوٹ سے or see out screen کے اوپر کوئی چیز دسپلے کرنے کے لیے so one is an input stream and the other one is an output stream since we are not going to discuss object orientation because we are not going to discuss object oriented programming in this course I will not show you the through which these classes are derived کیونکہ یہ derive ہوتی ہیں لیکن for the moment آپ کو اتنا ہی جاننا کافی ہے ہمارے پاس input stream کے بھی کچھ objects ہوتے ہیں for example see in or output streams کے بھی کوئی objects ہوتے ہیں for example see out کیونکہ یہ objects ہیں اپنی ممبر function بھی ہوتے ہیں انکہ ہم call کرسکتے ہیں اس کے بعد ان کے operators بھی ہیں جو ہم commonًا اسٹمال کرتے ہیں وہ double greater than sign or double less than sign in this case جو پہلے بات کی تھی اور آپ ریلائز کر چکے ہوں گے اب تک these operators heavily overloaded ہیں now what does overloading of these operators mean what it means is کہ اگر میں see in کو کہوں آئی اور آئی جو ہے وہ انٹیجر ویریبرل ہے تو اٹمیٹکلی سی ان will take a character as کی کوڈ from the کیبوڈ convert it into a number and store it into the انٹیجر ویریبرل on the other hand اگر میں کہوں کہ سی ان greater than greater than than c where c is a data of type character is a variable of type character اب اب اگر کیبوڈ پہ میں ابی سی کچھ دباتا ہوں تو وہ as a character store ہوتا ہے جاکے c کی اندر so جو see ان کا stream extraction operator ہے یعنی جو stream میں سے مطلب ڈیٹا نکالتا ہے اور store کرتا ہے وہ already overloaded ہے اس کو پتا ہے کہ جی numeric ڈیٹا یعنی انٹیجرز یا floats یا ڈبل اس کے لیے کیسا behavior ہونا چاہی ہے کیا conversion چاہی ہے یعنی float کے اندر decimal point بھی آ جاتا ہے وہ decimal point کو بھی ٹریٹ کرے گا اور convert کر کے ایک floating point variable کے اندر سٹور کرے گا اس کے بعد اگر آپ اس کو ایک چار pointer دے دیتے ہیں یعنی string دے دیتے ہیں تو اب string پرنے کی بھی سلاحیت اسی greater than greater than operator کے ساتھ associate it ہے now obviously one operator can't perform all of these functions ہمیں یہی لگتا ہے کہ ہم ایک ہی operator استعمال کر رہے ہیں internally you operator overloaded ہے انٹیجر کے لیے اور ہے float کے لیے اور ہے character کے لیے اور ہے string کے لیے اور ہے لیکن ہمارا استعمال جو ہے وہ operator overloading کے تھے بھی بہت easy ہو جاتا ہے ہم سمجھ لکھتے ہیں see in greater than greater than i so it's quite nice and simple ساتھ ساتھ string کے جو ہے اس کے ایک اور definition بھی دیکھ لیں جیسے اگر ہم نے دروازے کا ذکر کیا یا اس کو pipe ایک سمجھ لیں کہ یہ tube are connecting to things تو یہ two things کیا ہے ہر string کے لیے کوئی نو کوئی source ہوگا اور نو کوئی نو کوئی destination ہوگی اب اگر see in کو لے لیں input stream ہے اس کا source you have a normally keyboard ہوتا ہے اور اس کے output your destination جس کو ہم کہہ رہے ہیں see in کے لیے destination side for destination could be an ordinary variable which means native data type کا variable it could be an area in memory it could be one of our own data types مطلب objects اگر ہم نے overload کیا ہوئے and so on so always there's a source and there's a destination اگر see out کو لے لیں تو see out جو ہے that is the output ہمارے پاس stream یہ دیتہ اندر سے لے کے in human readable form ہمیں present کرتی ہے یہاں پے again the source could be a file or a region in memory or the processor or a simple variable or our own object a data type اور یہ اس کا source ہو جائے گا see out کے لیے or destination normally اس کے لیے screen ہوتی ہے the destination of course you can think of کیجی printer بھی ہو سکتا ہے screen بھی ہو سکتا ہے file بھی ہو سکتا ہے and so on but we've looked at file input output so you know that happens ایرین ممری جب میں کہتا ہوں that means it could be an array that you're reading or writing or it could be a character string which itself is an area in memory so every stream has an associated source and a destination اس کے بعد ایک سٹیم کے ساتھ کنسپٹ آتا ہے state کا یعنی stream اس وقت کس حال میں ہے اب یہ حال والی بات کہاں سے آگئی دیکھیں ہم stream کو کہتے ہیں see in greater than greater than i اور i ہے integer اور وہاں پہ ہم input دینے جاتے ہیں تو وہاں a ڈال کے انٹر دبا دیتے ہیں the stream knows کجناب یہ کوئی bad input آئی ہے so it is capable of signalling or setting its state saying کہ جی میرے ساتھ کوئی اچھی چیز نہیں ہوئی so from a program we can always test کہ stream کی state ٹیک ہے یا کوئی problem ہوا تھا یہ میں اس واس سے بات کر رہا ہوں کہ ہمارے programming کے اندر we should do all kinds of error checking debugging error we don't want to manipulate bad data so ہر جگہ پہ you should always be checking for example اگر ایک سیمپل سار program لکھیں آپ کہیں یہ program ہے جوکہ دو integers پڑھتا ہے keyboard سے اور ایک کو دوسر سے divide کر کے answer دے دیتا ہے so you could say something like int i comma j see in greater than greater than i greater than greater than greater than j دونوں پڑے گئی see out less than less than i slash جی i divided by جی now اگر problem کی definition اتنی ہی تھی now print the ratio of these two integers or جو بھی integer division ہو رہی about ever this would be all right it would work but what happened اگر user جو ہے جی کو zero انتر کر دے you don't want a divide by zero because even the computer does not know how to do it when you have that آپ کا program will probably throw an exception or an error and halt but اگر آپ program کے اندر ہی اس error کو trap کر لیتے it would be much nicer you would have said if j is not zero any j is greater than zero or less than zero تو پھر i over جے کو print کرو so error handling and checking is always important the same thing applies to input output streams جب آپ کوئی انپٹ یا output operation کرتے ہیں good programming would indicate کیجی آپ چیک بھی کریں کہ یہ read یا write operation جو ہے یہ کرکلی perform ہو سکا ہے یا اس کے performance کے اندر کوئی error آیا ہے اس کے لیے آپ جو جو بھی stream استعمال کر رہے ہیں input stream ہو یا output stream ہو اس کی آپ state check کر سکتے ہیں so you can always check the state of a stream other things that the streams provide us are a capability of formatted input output ابھی تک جو ہم استعمال کرتے رہے ہیں for example scene or see out کو بڑا بڑا سیمپل سا استعمال تھا اس کے اندر ہم formating نہیں کر رہے تھے ہم کہتے تھے انٹیجر پرنٹ کر دو بہت ہو تو دو انٹیجر کے درمیان طب دال دو پھر دوسرہ انٹیجر دال دو نیو لین دال دو simple یا floating point number and so on but you know کبھی آپ نے computer print out دو دیکھے ہوں گے اتنا سیمپل کوئی بھی print out نہیں کرتا کہ جہاں پہ دل کیا وہاں پہ number لکھا جائے for example آپ اپنے بجلی کا بال دیکھ لیں یا گیس کا بال دیکھ لیں تو آپ کو پتا ہے کہ بال دو ہے وہ کاغرز دو پہلے سے print ہوا ہوئے اس کے اندر خانے بنے ہوئے ہیں اور خانوں کے اندر computer نے number صحیح جگہ پرنٹ کیا ہوئے ہیں کبھی کبھی آپ کو لگے گا کہ جی بال کی printing غلط ہوئی ہے لیکن وہ computer کی گلطی نہیں ہے وہ کاغرز جو پرنٹر میں چڑھایا گیا ہے وہ آگے پیچھے ہو جاتا ہے تو number اوپر نیچے ہو جاتے ہیں but the point I'm trying to make is you want to format the output in such a way that the numbers are placed correctly at the correct position on the paper or on the screen for that matter آپ ایک matrix دکھانا چاہتے ہیں screen کے اوپر آپ چاہیں گے کہ پہلے column کے numbers اوپر نیچے ایک صحیح column کے اندر نظر آئیں دوسرا column بھی exactly اوپر نیچے نظر آئیں and so on you need to format these things اگر آپ word processing کریں آپ کو پتا ہے کہ جی آپ پیرگراف ٹائیپ کرتے ہیں تو left margin تو ہمیشہ الائنڈ ہوتا ہے سب چیزیں لفک پر لگی ہوتی ہیں لیکن right margin جو ہے وہ رگد ہوتا ہے کہیں پر لمبا لفز آگیا کہیں پر چھوٹا آگیا تو وہ ماجن سیدہ نہیں ہوتا لیکن اگر آپ word processor استعمال کر رہے ہیں تو اس کے اندر پیرگراف جسٹیفکیشن کا ایک button پڑا ہوتا ہے یا کہ ایک menu choice ہوتی ہے آپ چاہیں تو پیرگراف کو جسٹیفائے کر لیں which means کا left margin and right margin دونوں جہیں وہ بالکل سیدہ ہو جاتے ہیں by adjusting the space between the words now what happens اگر آپ see out کے ساتھ character string لکھنا چاہیں اور اس کو بھی چاہیں کہ جی وہ یا ایدر لگی ہو یا اس ماجن کے ساتھ لگی ہو this is what we call formatting the output آپ ایک number ہے پائے ہے اس کی value print کرنا چاہتے ہیں ایک variable inside your program اس میں پائے کی value stored ہے 3.1415926 or whatever آپ چاہتے ہیں کہ جب پرنٹ ہو تو یہ پرنٹ ہو 3.142 so اس کے لیے بھی کوئی formatting کا طریقہ ہوگا اور ہے یعنی internal representation could be different as compared to the presented representation which we read as human beings so we can do a lot of formatting with these strings other than that ان کے ساتھ member functions آجاتے ہیں let us take a look at see in کے member functions کیا ہیں ابھی تک تو ہم operator استعمال کرتے رہے ہیں see in greater than greater than لیکن آپ get بھی کر سکتے ہیں you could write see in.get so ابھی آپ کو idea ہے آپ objects بنا چکے ہیں اپنی classes لکھ چکے ہیں یہ notation ہی بتا رہی ہے کہ see in تو object ہوگا so see in is an object of type input stream ice stream so see in.get means get is a member function of the see in object which is of a certain class and یہ member function کیا کرتا ہے well آپ نے file input output میں get استعمال کیا ہوگا so it reads a character from the keyboard in this case کیونکہ see in ہے جو object اس کو call کر رہا ہے so وہ کیبوٹ سے ایک character پڑکے return کرتا ہے see in.get کے ساتھ کے بھی ہمہار پاس دو variance ہیں ایک تو ہے see in.get will return a character so you can write something like see equals see in.get with empty parentheses دوسرہ طریقہ جو ہے وہ ہے see in.get اور parentheses کے اندر آپ لکھیں character variable so it is one character at a time this is working with characters it's not a number it is not a string it is one character at a time so character ڈیٹا کی بات ہو رہی ہے see in جو ہے وہ read بھی کر سکتا ہے so دیکھیں آپ یہ تیسری چیز آگی پہلے تھا see in greater than greater than which is the operator version of the use of see in input stream کو ہم operator کے ساتھ کیسے استعمال کرتے ہیں دوسرہ تھا see in.get this was a function being used with the input stream تیسرہ ہے see in.read یہ بھی function ہے but read جو ہے وہ بجائے ایک character کے آپ کو buffer دے دیتا ہے so you can point to a buffer پھر بتا دیں کتنی characters پرنے ہیں see in is an object of type input stream بیسی کر لی اگر ہم اپنا کوئی object بنائیں of type I stream اس کو بھی یہ functions مل جائیں گے کیونکہ ایک ہی class سے وہ derive ہو رہا ہے but I don't want to get into the derivation part but you should understand that there are many methods and operators associated with see in the same thing applies to see out now see out ہماری output stream ہے یعنی computer کے اندر سے جو دیتا ہے اس کو in a human readable form usually present کرنا ہے تو see out کے ساتھ جو operator associated ہے وہ ہے stream insertion یعنی stream میں insert کرو تو stream جو ہم آگے جاکے screen پی دکھا دیتی output اور وہ ہے double less than sign so see out کے ساتھ operator is double less than اور پھر جو بھی ہم data variable کا نام دیتے ہیں اس کی value print ہو جاتی ہے so there is again a conversion going on اور اگر ہم چاہے یہاں پہ ہم formatting بھی کر سکتے ہیں تو formatting بھی ساتھ ہو جاتی ہے see out کے ساتھ right آجاتا ہے see in کے ساتھ read تھا see out کے ساتھ right آجاتا ہے function اگر ایک buffer پورہ کا پورہ چنک لے کے آپ لکھنا چاہیں اور see in کے ساتھ جو تھا وہ get تھا تو see out کے ساتھ put آجاتا ہے which is for single character usage so you can write see out dot put and a character variable وہ character variable کے اندر جو data اس وقت پڑا بھائے وہ screen کے اوپر print ہو جائے گا بیسیک چیز میں چاہاں پڑھا ہوں گا سٹریم کیا چیز ہیں they are nothing but an ordered sequence of bytes they allow data to move from one part of the computer to another part which may be the screen or the keyboard from and to or from memory or files on disk and so on so forth but basically دو ایک source or a destination کو connect اپس میں کرنے کے لیے ایک byte stream ہے یہ ہے see++ کا input output system یہ جو byte streams ہے یہ implement کی گئی ہیں as objects since they are objects they do have their own member functions they do have their own member operators the member operators are heavily overloaded to allow these streams to handle a variety of data types integers, floats, characters, strings so on and our own for our own of course ہمیں overload کر کے اوپریٹس لکھنے پڑیں گے but native data types کے بارے میں ان سٹریم کو already پتا ہے دو نو سٹریم کی سٹیٹس ہیں so we can always check کہ اس وقت سٹریم کا حال کیا ہے تیک چل رہی ہے پچھلہ اپریشن جو تھا وہ تیک چلا تھا یا کوئی ارر ہوا تھا and it's a good idea to build in error checking آپ نے دیکھا ہوگا کہ ہم نے کئی دفعہ while loop کے اندر numbers پڑنے کے لیے ہم نے کہا دیا تھے while cn.something is not equal to end of file یا فائل read کے ساتھ ہم نے end of file استعمال کرنا شروع کر دیا تھا that is also a way of looking at the state of the string فائل ختم ہو گئے جو پڑھ رہے تھے تو ایک flag سیٹ ہو جاتا ہے flags کے بارے میں ہم بات میں بات کریں گے پھر manipulators بھی آئیں گے but for the moment it's important to understand source destination there's a concept of a state and there's a concept of a conversion of data from a human readable representation to an internal representation جب ہم یہ input output streams استعمال کر رہے ہوتے ہیں تو آپ کو یاد ہوگا کہ ہم نے کچھ فائلیں ہمیں include کرنا پڑتی ہیں ان کو نہیں آپ کو بھولنا چاہیے جب بھی ہم cnc out استعمال کر رہے ہیں تو ہم اوپر iostream.h کو include کرتے ہیں that is the input output stream کی header file اس کے اندر یہ ساری کلاسز اور objects defined ہیں اور آپ آپ کے پاس اتنا نولج ہے کہ آپ آپ اس فائل کو کھول کے دیکھ سکتے ہیں it'll look complicated لیکن اب اگر آپ ہور سے چاہیں تو پڑھتے جائیں تو سمجھ بھی آجاتی ہیں ان فائلوں کی کنسی object ہے کنسا method ہے کنسا function ہے کیا پروٹو تاپ ہے یہ چیزیں ان فائلوں کے اندر defined ہیں اگر آپ فائل input output کرنا چاہتے ہیں تو آپ کو fstream.h جو ہے file stream والی فائل وہ include کرنا پڑتی ہے اور اس کے ذریعے آپ اپنی stream ڈیکلیر کر سکتے ہیں input stream کے لیے if stream یعنی file سے ہم پڑیں گے اور input کریں گے تو if stream کی object سام بنا سکتے ہیں output کے لیے of stream اور پھر اگر input output کرنا ہو تو fstream یہ جو ہے یہ ہم استعمال کرتے ہیں لیکن اس کے لیے header file include کرنا لازمی ہے ساتھ ہی میں نے بات کی formatted input output کی وہ آجتاک ہم نے کوئی کی نہیں hopefully آپ نے خود پڑھ لیا ہوگا اور ابھی تا کچھ practice بھی کر چکے ہوگے but for the moment اس کو دیکھیں stream کو کسی طریقے سے ہم manipulate کر رہے ہیں کہ میں نے نمبر تو دالا ہے 10 لیکن میں چاہتا ہوں دوسی طرف جب نکلے تو لکھا ہو 100.00 i.e. 10.00 لکھا ہے so ہم stream کو manipulate کرنا چاہ رہے ہیں اس کے ساتھ اس کو ہم سارا کہتے ہی formatted input output کو stream manipulation ہے اور اس کے لیے ہمارے پاس functions بھی ہیں اور operators بھی ہیں ان کی ہم بات کریں گے لیکن اس کو manipulate کرنے کے لیے ایک اور ہیڈر فائل ہے جو ہمارے پروگرم میں انکلوڈ کرنی چاہیے وہ ہے iomenip.h ioinput output manip short for manipulate manipulate so iomenip.h یہ بھی آپ کو انکلوڈ کرنی پڑے گی اگر آپ ان کو manipulate کرنا چاہتے ہیں streams کو formatted input output now let's take a look at c in and c out and other ones these streams ہیں جو کہ standard ہمارے program کو provide کی جاتی ہیں جب بھی آپ c++ کا program لکھتے ہیں اور پھر ہم اس کے اندر io stream شامل کر لیتے ہیں تو ہمارے پاس c in جو ہے وہ reading کے لیے extreme مل جاتی ہمیں this is a built in thing ہمیں اس کے لیے کچھ کرنے کی ضرورت نہیں ہے یہ object ہم استعمال کر سکتے ہیں اسی طرح c out مل جاتا ہے for output لیکن کچھ اور streams بھی ہمیں ملتی ہیں by default ایک stream ہے c error c e r r اس کا نام ہے پڑھا جاتا ہے c error ایک اور stream ہے c log c l o g اور اس کو ہم c log pronounce کرتے ہیں یہ streams کیا ہیں اس کے لیے تھوڑا سا مجھے بات کرنے پڑے گی buffered input output system کی میں نے کچھ لیکچھ پہلے یہ بات کی تھی کہ دیکھیں ہمارے جو computer ہے اس کے اندر زیارہ چیزیں وہ تو electronic ہیں یعنی chips memory لیکن دسک بھی کوئی چیز ہے which is electromechanical for that matter the keyboard itself is electromechanical یہ ایک switch لگا ہوا ہے اس کو ہم دباتے ہیں mechanics کچھ کرتی ہیں اور پھر کچھ بجلی کے سینلز آگے جاتے ہیں point is the electromechanical parts of a computer are normally very very slow as compared to the purely electronic components so there is a speed difference between the two دوسی چیز یہ ہے کہ جی every input output operation جو ہے it costs cost what cost computer time so if time is money then it costs computer money یہ جو ہے چیز کہ جی input output operation کا خرچا ہاتا ہے اور پھر input output devices are slow یعنی keyboard بھی slow ہے for that matter screen بھی slow ہے اور اگر ہم چاہیں کہ جو output ہے اس کو disk پے لکھ دیا جائے تو disk بھی بہت slow ہے as compared to the speed of the microprocessor and the memory اس کے لئے ہم ایک میکنیزم استعمال کرتے ہیں وہ ہے buffered input output کا now what does buffered input output mean means کہ اگر میرا ایک program ہے وہ چھوٹیسی ایک loop چلاتا ہے اور loop کے اندر ہم ہر دفعہ loop سے جب گزرتے ہیں تو ایک number output کر دیتے ہیں یعنی وہ ایک number میں چاہتا ہوں کہ file کسی disk کے اوپر لکھا جائے file کے اندر پہلے ایک number آئے پھر دوسر آئے پھر تیسر آئے تو اگر تو ہم یہ کرنا کرنے کی کوشش کریں کہ ہر دفعہ loop میں سے جب گزرتے ہیں تو disk کے اوپر ایک number لکھتے تو it is horrendously wasteful of computer time because the disk is an electromechanical device میں نے بھی کئی دفعہ بات کی تھی آپ سے کہ جی disk پی کوئی دیتا ایک کتھا کر کے ایک دفعہ لکھ دیا جائے تو وہ میکنیکلی تو ایک دفعہ movement ہوگی یعنی disk خوم رہی ہے heads move کریں گے the heads will move mechanically once to a point of data will be written on to disk it's a much more efficient way of using the disk so whenever we have a program that is trying to output data to disk it would be nice اگر ہم بجائے ایک ایک کر کے number disk پہ لکھتے جائیں پہلے numbers کیسی جگہ پی ہم ہی کتھے کر لیں جب کافی ہو جائیں تو اس وقت ایک right operation کے ساتھ disk پہ وہ لکھتے ہیں یہ جو area ہے جس پہ ہم numbers ہی کتھے کرتے ہیں اس کو ہم buffer کہتے ہیں اور یہ جو ہے مثال ہے buffered output کا یعنی output درکلی disk پہ نہیں پہنچی پہلے buffer میں کٹھی ہوتی رہے جب buffer میں کافی ساری چیزیں کٹھی ہو گئیں تو وہ جاکے ہم نے disk پر لکھتی ہے now think of another situation ہمارے پاس program ہے جو کہ لم بی چوڑی گھم بیر کسم کی نا کالکلیشن کرتا ہے اتنا کمپلیکس ہے جی وہی جو اس کی loop تھی وہ بجائے خید وہ ایک minute میں ایک loop چلے اتنی زیادہ کالکلیشن ہے اس کے اندر لیکن کہیں نہ کہیں کوئی ارر بھی آسکتا ہے یا ہم دیکھنا چاہتے ہیں کہ جی کتنی loops چل گئی ہیں میرے ساتھ یہ ہو چکا ہے تو میں آپ کو ایکزامپل اپنے program کا دیتا ہوں کہ جی loops تو اس نے چلانی تھی ہزاروں اور ہر loop کی اندر کچھ دیتا اس نے output بھی کرنا تھا لیکن وہ loop جو کتنی loops چلی ہیں I didn't want that as part of the file پہلا problem I needed two streams ایک جو مجھے دکھائے as a human being کتنا یہ program کتنی دفعہ loop میں سے گزا چکا ہے اور دوسی طرف دیتا جو ہے وہ disk پر لکھا جائے ایک تو میری یہ requirement ہوگی دو streams کی دوسرا مسئلہ جو ہے وہ تھوڑا سا سمجھنے والا ہے کیونکہ ہمارے پاس دو opposing requirements آری ہیں ان streams کے اوپر ایک stream جو جاری ہے دیتا disk کے اوپر لکھنے وہ تو میں چاہتا ہوں کہ جی computer resources کو waste نہ کرے کہیں پہ دیتا ایک اٹھا ہوتا رہے اور پھر جب کافی ہو گیا تو disk right operation ایک right operation میں اس پر لکھ دیا جائے that data may represent an output of 20 passes of the program through the loop بیس دفعہ loop چلی ہے تو اتنا دیتا ایک اٹھا ہوا ہے کہ ایک disk right operation perform ہو گیا دوسی طرف as a user میں نے program چلایا ہوا ہے میں چاہتا ہوں کہ جو مجھے ساتھ ساتھ پتہ چلتا رہے کہ جناب کتنی loops ہو گئی ہیں اب دیکھیں اگر جو مجھے اس نے دکھانا ہے loop count screen کے اوپر کہ loop 1 loop 2 loop 3 وہ بھی دیتا بہت چھوٹا چھوٹا ہے اگر یہ والا دیتا بفر ہونے لگ پڑا اور وہ اس نے کہا کہا جی screen پر اس وقت میں بھیجوں گا جب کافی میر پس دیتا ہوں گا تو جب میں program جو screen پے جانا ہے وہ دیتا ایک اور بفر میں کرتھا ہو رہے screen پے کیا نظر آ رہے کچھ نہیں جب screen والا بفر اس پر اندر کافی دیتا آ جائے گا تو ایک دم screen کے اوپر تھکھ کر کے loop 1 2 3 4 5 6 256 اور whatever loops نظر آ جنگی یہ چل پڑی ہیں اب میرے والا جو program میں لکھا تھا وہ بہت گھمبیر کالکلیشن تھی it used to take on the order of minutes to perform one loop nonetheless I wanted to find out کہ جی program چل تو رہا ہے یہ تو نہیں ہوا computer hang ہوا ہے میں بڑے عران سے بیٹھا ہوں program کی کمان دے دی screen پے کچھ نہیں آ رہا ہاں جی چل رہا ہوگا دو دن گزر گئے کچھ نہیں آیا screen پے چل رہا ہوگا I don't know I want to know at every loop ایک minute گزر گئے ایک loop چل گئے دو minute گزر گئے دوسی loop چل گئے So I need screen کے اوپر unbuffered output یعنی لیکن میرا ہی program دوسی stream پے جب دسک پے لکھنے جائے تو وہ ہر دفعہ دسک پے لکھنے کی کوشش نہ کرے which is a slow and wasteful operation it should try and collect the data into a buffer جب بفر میں کافی دیتا ہو گیا اس وقت جاکے disk پے ایک دفعہ لکھ دیا جائے now these requirements which are contradictory or rather they have different issues because they have different issues because they have different issues they are met for our system with the C error object C out وہ buffered output ہے ہمیں نظر نہیں آتی because ہمارے کمپائلرز جو آج کل بہت زیادہ انٹلیجنت ہیں لیکن اگر اگر آپ unix system پے اوپر چاہے جائے یا command line programming آپ کو آتی ہو ا...! لیکن کہ جاہے پہلے وہ کچھ دیتا ایک قتح کرے گا اور پھیر سکرین کے اوپر بھیجے گا لیکن سی ارر وہ انبفرد ہوت ہے جیسے ہی کوئی چیز آپ نے سی ارر کو دی اس نے ساتھ ہی سکرین کیا نیز تو اوپر چیزئے توکہ مجھے لوپ میرے دکھا دے کے کتنی لوپس چیلی ہیں and I would use something like the see out object to write on to desk which would buffer the output. ادھر efficiency مل رہی ہے ادھر مجھے information مل رہی ہے. normally we see error object وہ see plus plus میں exactly اس کام کے لیے استعمال کرتے ہیں اگر ہمیں immediate information چاہیے کہ program ابھی کہاں سے گزرا ہے اس کے ساتھ ساتھ see log بھی ہے see log جو ہے اس کو standard log کہتے ہیں جو program کی detailed information ہے کہ یہ program کہاں سے چل رہا ہے اگر ہم وہاں پہ کوئی چیز inform مطلب ایک اٹھی کرنا چاہیں تو وہ ہم see log stream کے تھوے لکھتے ہیں normally جب یہ program ہمارے چلتے ہیں تو see out, see error اور see log سب جو ہے وہ screen کے ساتھ connected ہیں لیکن طریقے ہیں کہ ان کو علیدہ علیدہ بھی کیا جا سکے see error کی output کہیں اور چلی جائے see out کی کہیں اور چلی جائے but that depends on the operating system اگر ہم چاہیں کہ جناب buffered output ہو یعنی now suppose کہ ایک buffer کام size سیٹ کر لیتے ہیں ہمارے پاس facility نہیں ہے normally your operating system specify کر دیتا ہے or language compiler specify کر دیتا ہے لیکن ایک typical size وہ 512 bytes کا ہے کہ جی 512 bytes worth of information جب ایک اٹھی ہوگی اس کے بعد output ہوگی لیکن ہم buffered input output کر رہے ہیں لیکن program میں کوئی ایسی جگہ پہن جاتے ہیں جہاں ہم کہتے ہیں کہ جو بھی buffer میں چیزیں اس وقت دکھا دو تو is there a way of doing that the normal mechanism is flush so we flush the stream آپ سے سمجھ لیں کہ جی buffer میں چیزیں ہی کٹی ہو رہی ہم نے flush command دی نے buffer سارے کو خالی کر دیا جدر جانا تھا دیتا یعنی screen پر usually وہ آگیا یا فائل میں ڈالنا تھا تو اٹھک کر کے فائل پر لکھا گیا ابھی تاک آپ نے دیکھا ہوگا کہ see out کے ساتھ ہم ایک line کو ختم کرنے کے لیے دو مختلف چیزیں استعمال کرتے رہے ہیں ایک ہے new line character جس کو ہم یا single quotes یا double quotes کے اندر backslash in کر کے لکھ لیتے ہیں وہ کیا کرتا ہے کہ جبھی screen پر output ہم کر رہے ہیں تو ایک نئی line سے next line شروع ہو جائے گی یعنی the cursor moves to the left margin of the next line on the screen new line is just a character لیکن there was another one which was ڈل ڈل single اگر آپ کہیں see out less than less than ڈل تو آپ کو لگے کہ وہی ہوا ہے جو کہ new line character نے کرنا تھا یعنی cursor next line کے left margin میں آگیا ہے لیکن ڈل کچھ اور بھی کرتا ہے وہ actually flush بھی کر دیتا ہے بفر کو as a result what you do is what happens is کہ see out لگتا ہے کہ جی un buffered ہے ہر دفعہ ہم نے لکھا تو see out کی output foreign screen کیوں پر آگئی now depending on the compiler you can see the buffered effects or you may not be able to see the buffered effects and depending on of course your operating system but ایک چیز آہر ہے اگر آپ program کا code پڑھ رہے ہیں source code تو اس میں تو آپ کو نظر آجائے گا کہ جی see error کھاں پہ استعمال ہوئے و see out کھاں پہ استعمال ہوئے typically that is also a programming style کہ جو see error پہ output ہے that is informative چھوٹی see جو بتاتی ہے program اس وقت تہاں پہ چلا ہے اور see out کی output کیوں ہے that is more detailed and that is the actual output from the program so even source code کی اندرنا ان دو چیزوں کے فائدیں ہیں see in کے ساتھ ایسا کوئی مسئلہ نہیں ہے see in is the input object وہ اکیلہ ہی ہے but output کیوں پر ہمارے پہ see out see error see log اس کے بعد دو اور بھی ہیں لیکن وہ dos کے زمانے سے دیت کرتے ہیں جب یہ disc operating system چلا کرتے تھے اور windows نہیں تھی اور کوئی graphical user interface نہیں تھا وہاں پہ see aux بھی تھا auxiliary see a u x that was another stream and see prn short for printer that was yet another stream see printer was also an output stream going to the printer see aux was an auxiliary input output stream but وہ اب زیادہ تھا relevant نہیں رہے now let us take a look at some of the operators associated with these streams ہم استمالتو کرتے ہیں let's say stream insertion operator یہ نہیں less than less than جو ہے جسے ہم see out کے through ڈیٹا بہر نکالتے ہیں we need to understand کہ یہ operator implement کیسے ہوا بے اب ہمارے پاس اتنا ہم پڑھ چکے ہیں about operators and overloading کے بات کی سمجھ بھی آجائے گی they can see out کے ساتھ ہم chained output کر سکتے تھے what does chained output mean we could write something like see out less than less than double quotation marks کے اندر the value of the first integer is پھر less than less than i اب ایک character string ہم نے دیدی پھر double less than sign کے ساتھ پھر i دیدیا اور اس طرح ہم آگے چلتے جائیں بے شاک جب تک ہم semicolonی دالتے ایک ہی see out سٹیٹمنٹ چلتی جا رہی ہے now how does that work what happens is کہ جو پہلی چیز ہم نے دیئے in this case the string called the value of the first integer or something like that پہلی چیز see out میں دال دی جاتی ہے یعنی it is stream insertion جس طرف arrows point کرتے ہیں دیتہ اس طرف کو ٹریبل کرتا ہے تو بڑا آسان ہے stream insert کیا وہ دوسی طرف نکلے گا screen کے اوپر آگیا اس کے بعد باقی کے حصے کا کیا بنا پھر ایک double less than sign ہے پھر eye پڑا ہوا ہے اب اس کو left hand side پر کیا نظر آنا چاہیے اس کو پھر see out نظر آنا چاہیے یعنی it should look as if کی جو stream میں دالا تھا وہ تو چلا گیا اب next operation is see out less than less than eye now once we have defined that this is the behavior that we expect then we understand that this is exactly the way it has been programmed یعنی your double less than ہے جس کام stream insertion operator کہتے ہیں وہ operator output streams کے لیے overloaded ہے اور اس overloading کا syntax جو ہے it returns a reference to the output stream یہ آپ کیا handouts میں بھی دیا ہے screen پے دیکھیں کی جو stream insertion operator ہے اس کا syntax ہے something like o stream and یعنی it returns a reference to an object of type o stream پھر o stream کولن کولن یعنی it's a member of the class o stream operator because it's an operator double less than that is the symbol that we use and so on important thing I want to point out is کہ جو double less than operator ہے it returns a reference to the o stream object itself ہوتا کیا ہے کہ جب بھی ہم نے ایک chain output statement لکھی تو وہ left to right process ہوتی ہے so see out less than less than the value of the first integer is یہ پہلے process ہوگا left to right process کیا ہوا کہ یہ جو پوری character strength یہ screen پے display ہو گئی return کیا ہوا as per the prototype and the definition it returns a reference to the o stream object in this case کنسا object تھا see out so a reference to see out is returned so now next half of the statement جو اس کو کیا نظر آتا ہے it sees see out less than less than I and it operates quite nicely this allows the stream insertions to be chained the same actually applies to input so if we say something like see in greater than greater than which is now the stream extraction operator ہم نے bytes you have a stream as a extract کنچکنکالنی ہے so if we say see in greater than greater than I than J or I اور جی دونوں let's say are integers اب پھر یہ left to right processing ہوگی اور یہ جو ہے یہ I stream کے ساتھ ہو رہا ہے لیکن the operator will return a reference to the I stream object so it returns a reference to the input stream object جو اس کس میں see in ہے پہلا حصہ جب see in greater than greater than I than greater than J so وہ رپلیس ہو جاتا ہے پہلا حصہ کام کر جاتا ہے دوسرا حصہ کام کر جاتا ہے so it's important to understand کے یہ اپریٹرز کس طرح کام کرتے ہیں ان کے پروٹو تاپ دیکھ لیں and you will realize they return references to the IO objects themselves and that is the way we can chain them now let us go on and take a look at what are the various other methods associated with these input output streams see in کے ساتھ کچھ اور functions associated ہیں کچھ ہم استعمال بھی کر چکے وہیں پہلے میں نے ابھی تو آپ کا بات ہی تھی کہ stream insertion operator اس کے بعد stream extraction actually see in کے لیے پھر see in کے ساتھ ہم نے get بھی استعمال کیا see in کے ساتھ read بھی کیا اب see in کے ساتھ ایک اور function ہے اس کا member function ہے object کا وہ ہے get line تو get line وہ پورا ایک buffer پر لیتا ہے use specify and up to a delimiter use specify so you can use something like scene.get line پھر parentheses کے اندر کوئی آپ 4 pointer buffer کا آپ نام دے دیں گے that'll be the variable جس کے اندر data store ہوگا پھر آپ ایک integer دے دیتے ہیں کتنے کریکٹرز پر نہیں ہیں اگر آپ integer دے دیں گے ایک 100 اس کی value دے دیتے ہیں تو get line function ہے وہ 99 کریکٹرز داک پر لے گا because if you remember every string in c++ or even c has to be terminated by a null character backslash 0 جو لکھا جاتا ہے so 99 characters plus null will make 100 تو جب آپ 100 لکھتے ہیں وہ 99 پڑے گا پھر اس کے بعد ہم ایک delimiter بھی دے سکتے ہیں delimiter کا کیا مطلب ہے کہ جی what happens اگر 99 کریکٹرز نہیں ہم نے اندر کرنے ہم نے 10 کرنے جس کو پتا تو جو اگر ہم کوئی چیز ڈائپ کریں اور پھر انٹر دبادیں تو وہ کہ جی 100 کریکٹر پورے نہیں ہوئے پر نیو لائن آگئی ہے so that's a delimiter ڈیٹا پڑھ کے بفر کے اندر دال دو so there's a get line function اس کے بعد کچھ انٹرسٹنگ سے function ہے scene کے ساتھ ہم get کرتے ہیں تو ایک کریکٹر پڑھتے ہیں کیا وہ کریکٹر آپ پائپ کا تصور کر لیں کیا یہ پائپ ہے کیا کوئی طریقہ ہے جنب جو بائٹ نکلی ہے اس کو واپس پائپ میں دال دیا جائے from the wrong side اس کے لئے there's an un get so you can do a scene.un get لیکن یہ یاد رہے صرف ایک کریکٹر اس سے زیادہ نہیں so آخری جو نکالا ہے وہ آپ واپس دال سکتے ہیں you can do something like scene.peak a peak as the word implies کہ جی وہ چھپ کے نا کہیں پر دیکھنا جو ہے this is like a trick that you're performing ہم کہہ رہے ہیں کہ جی ہم ابھی get نہیں کرنا چاہتے کریکٹر کو ہم چاہتے ہیں کہ جی یہ پتا چاہتے ہیں کہ اگلہ کریکٹر آگونسا رہا ہے so you can do scene.peak and it will return the next character that would be read if you issued a scene.get so interesting stuff you have get line you have scene.peak you have un get read as member functions of this input class اسی طریقے سے I mean there's a put line for the see out object کہ آپ پوری ایک بفر کو out کر دیں because see out already knows how to handle character strings so we can just simply do that but see out dot right is useful وہ ایک raw unformatted output کر سکتا ہے will output کرے گا on see out کے ساتھ stream insertion operator which is the double less than sign اگر استعمال کریں تو بہت ساری formatting convertions کی جا سکتی ہے what can we do something like کہ ہم نے a complex class بنائی ہے اگر جی کمپیکس نمبر آپ کو یاد ہوگا دو حصے ہیں ایک real part ہے ایک imaginary part ہے ہم چاہیں تو دو نمبر جو ہیں ان کو space دے کے لکھ دیں اور وہ اس کو پر لےنا چاہیے چاہیں تو دو نمبر کو comma دے کے separate کر لیں depending on what we want that is the way we would write the overloaded operator but you have to understand something else میں نے جا پہلے کمپیکس نمبر کی بات کی کہ maybe you want two numbers separated by a space that means you just space ہم چھوڑتے ہیں this is significant how is it significant well try a very simple test آپ کہیں کیجی 4 name 60 name is an array of 60 characters پھر آپ کہیں see in greater than greater than name اور جب آپ enter کرنے لگیں keyboard پہ تو اپنا نام دال دیجےگا میں دالوں میں کہوں گا نوید مالک اگر میں now نیم کی value output کراو using c out تو مجھے پتا چلے گا کہ جی پہلہ word جو تھا وہ name array in the store ہوا ہے دوسرا store نہیں ہوا what happens is کہ یہ جو ہماری streams ہیں they are sensitive to white space characters which are treated as delimiters آپ دیکھیں دو نمبر ہیں اگر ان کو ہم پرنا چاہتے ہیں there is almost no other way یا تو آپ کہیں ایک نمبر enter دوسر نمبر enter لیکن ایک ہی لائن پے تو درمیان میں ہم space چھوڑیں گے well these streams are intelligent enough کہ یہ space کو specially treat کرتی ہیں they treat them as delimiters ایک حصہ پڑا گیا دوسرا حصہ کہاں ہے it's not gone yet یہ ابھی stream کے بفر میں ہی پڑا ہوا ہے so if you actually said 4 name 130 comma name 230 so now 2 character now you can enter a 2 part name on the same line I would say something like نوید space ملک enter اور وہ نوید جو ہے وہ چلا جائے گا name 1 ارے کے اندر اگر وہ c in کے ساتھ میں نے استمال کیا اور c in ایک اور اسیو کروں گا with name 2 تو last name وہ name 2 کے اندر چلا جائے گا so things don't disappear they stay in the buffer till you actually extract them so you have already experiment کر لیے وہ press any to continue والا problem جو تھا کے جناب 2 characters آجاتے ہیں ہم normally کچھ ایسا program میں لکھنا چاہتے ہیں کہ یہ ہو گیا ہے press any to continue اب آپ کی بوڑ کے اوپر کوئی بھی کی دبا دیتے ہیں by the way کوئی ایسی کی نہیں جس پر any لکھا ہوئے when you see a message it says press any key doesn't mean that there is any key on the keyboard anyway آپ کی دباتے ہیں تو پھر آپ کی دباتے ہیں تو normally یہ program کام کرتا ہے at least dev c++ تو یہی تھا لیکن بفر میں اگر دیکھیں کیا ہوا ہے جو کی دبائی ہے وہ کیریکٹر بھی بفر میں گیا اور جو انٹر کی دبائی ہے یہ بھی کیریکٹر بفر میں گیا تو بفر میں actually 2 کیریکٹر ہیں اور scene.get جو ہے وہ پہلا والا پکر لے گا دوسرا ابھی بفر میں پڑا رہے گا and we had to write another scene.get to get but let's just recap what we have spoken about today is input output streams input output streams are classes جنکہ ہم objects استعمال کرتے ہیں objects they see in see out see error see log and so on ہم اپنے objects بھی کر سکتے ہیں وہ ہم file کے سلسلے میں already کچھ ان کے ساتھ operators associated ہیں ہمیں operator overloading کرنا آتے ہیں ہم نے overloaded operators بھی ہم لکھتے ہیں اس وقت ان streams کے لیے اور stream کا بیسے concept وہ یاد رکھے کہ it is a sequence of bytes اگلی دفعہ ہم جیس کی بات کریں گے وہ ہے manipulation which means formatting of input and output so till then خدا حافیس