1 1.Java 1.0 & 1.1 streams and classes 2.IO idioms 3. Object serialization.
IO Streams IOStreams are part of the Standard C++ library
-
Upload
marah-casey -
Category
Documents
-
view
36 -
download
5
description
Transcript of IO Streams IOStreams are part of the Standard C++ library
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 1 -
IO Streams
IOStreams are part of the Standard C++ library
Meant to be used in place of C stdio library
So why re-invent the standard io library
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 2 -
IO Streams
Considerations for IOStreams vs. printf... printf uses format strings
printf format strings are interpreted at run time not
compile time
With printf binding between variables and values occurs
at runtime
With IO streams there are no format strings
Cannot overload printf
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 3 -
IOStream Class HierarchyIOS
streambuf* readbuf( )IOS
streambuf* readbuf( )
ostreamconst ostream& operator << (type)
const ostream& operator << (streambuf*)
ostreamconst ostream& operator << (type)
const ostream& operator << (streambuf*)
istrstreamistrstreamifstreamifstreamofstreamofstream ostrstreamostrstream
istreamconst istream& operator >> (type)
const istream& operator >> (streambuf*)
istreamconst istream& operator >> (type)
const istream& operator >> (streambuf*)
streambufstreambuf
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 4 -
Input StreamsThe extraction Operator >>
Performs the same function as scanf in the C stdio library
Uses white space to delimit its arguments
Type at the keyboard
234 678
Execute code
int i, j;
cin >> i >> j;
i contains 234
j contains 678
Type at the keyboard
234 678
Execute code
int i, j;
cin >> i >> j;
i contains 234
j contains 678
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 5 -
Input Streams
The extraction Operator >>
Because istream extraction works like scanf….. It has many of the same problems
Type at the keyboard
my name
Execute code
int i, j;
cin >> i >> j;
values I and j are left unchanged
Type at the keyboard
my name
Execute code
int i, j;
cin >> i >> j;
values I and j are left unchanged
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 6 -
Input Streams
istream member functions to the rescue….
get( )
getline( )
Allow us to read an entire line or buffer
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 7 -
Input Streams
get Member Function Prototypes
class istream{public:
...istream& get(char* ptr, int len, char delim = `\n');istream& get(char& c);int get();istream& getline(char* ptr, int len, char delim = `\
n');istream& getline(char& c);int getline();istream& read(char* ptr, int n);
};
class istream{public:
...istream& get(char* ptr, int len, char delim = `\n');istream& get(char& c);int get();istream& getline(char* ptr, int len, char delim = `\
n');istream& getline(char& c);int getline();istream& read(char* ptr, int n);
};
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 8 -
Input Streams
Member function get
Leaves delimiter in input stream
Member function getline
Reads and discards delimiter
Member function read
Used to read raw non-delimited bytes
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 9 -
Output Streams
The Insertion Operator << Performs the same function as printf in the C stdio library Its function members are similar to those in the istream class
class ostream{
public:...ostream& put(char c);ostream& write(const char* buffer, int length);
};
class ostream{
public:...ostream& put(char c);ostream& write(const char* buffer, int length);
};
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 10 -
Output Streams
The Insertion Operator <<
Member Function putInserts single character into output stream
Member Function writeWrites specified number of characters ...From designated buffer into output stream
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 11 -
Error Handling on Input
Reading Correct Input Data...
IOstreams designed so they can be tested
if (cin)
if (!cin)
Return true If the last read was successful
Return false If the last read was unsuccessful
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 12 -
char buffer[256];
while (cin.getline(myBuff, sizeof(myBuf))) { // process the characters in the buffer.}
char buffer[256];
while (cin.getline(myBuff, sizeof(myBuf))) { // process the characters in the buffer.}
char buffer[256];
while (cin.get(myBuff, sizeof(myBuf))) { cin.get() // read and discard newline // process the characters in the buffer.}
char buffer[256];
while (cin.get(myBuff, sizeof(myBuf))) { cin.get() // read and discard newline // process the characters in the buffer.}
Error Handling on Input
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 13 -
Error Handling on Input
Testing for Errors… cin.good()
Returns true if no errors
cin.eof()Returns true if the input stream is at end of file
cin.fail() Returns true if some input operation has failed
cin.bad()Returns true if something has gone wrong with streambuf
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 14 -
Error Handling on Input
Testing for Errors…
Once an input stream returns an error, it will no longer read any input
To clear an error condition on a stream one must call the clear() error member function
Syntax
cin.clear();
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 15 -
File IO Streams
ifstream and ofstreamTo open file…
File stream's constructor is passed the file to open
Prototypeofstream output( char* myFileName );
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 16 -
File IO Streams
ifstream and ofstream
void main( void ){ ofstream output("myFile.dat"); if (!output) { cerr << "Oops problem!!! Can’t open myFile.dat" << endl; } return;}
void main( void ){ ofstream output("myFile.dat"); if (!output) { cerr << "Oops problem!!! Can’t open myFile.dat" << endl; } return;}
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 17 -
File IO Streams
ifstream and ofstreamObserve the function ignore( ) ….
It’s tossing out the newline character left in input stream by the get function
Prototypeistream& ignore(int n = 1, int delim = EOF); n specifies the number of characters
to ignore delim character after which ignore quits.
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 18 -
File IO Streams
ifstream and ofstream
Observe the second argument to the ifstream constructorios::in
Specifies file to be opened for input
Default is input on an input stream
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 19 -
IO StreamsSeeking in IOStreams...
Absolute stream location in a stream called streampos
Can obtain current stream position tellp( ) member function of ostream Identifies the current position in the output streambuf tellg( ) member function of istream Identifies the current position in the input streambuf
To move within a streambuf seekp member function of ostream seekg member function of istream
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 20 -
IO Streams
Seeking in IOStreams...Prototypes
seekp (position); // absolute positionseekp (offset, ios::seekdir); // relative position
seekg (position); // absolute positionseekg (offset, ios::seekdir); // relative position
seekdir beg - seek from beginning of current filecurr - seek from current positionend - seek backwards from end of current file
Prototypesseekp (position); // absolute positionseekp (offset, ios::seekdir); // relative position
seekg (position); // absolute positionseekg (offset, ios::seekdir); // relative position
seekdir beg - seek from beginning of current filecurr - seek from current positionend - seek backwards from end of current file
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 21 -
StrstreamsFormatting Using Streams…
Often when working with display screens necessary to dynamically create messages
Useful functions in the C stdio library for doing such formatting
functions sprintf and sscanf
C++ also provides similar functionality with strstreams.
Must include <strstrea.h>
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 22 -
Strstreams
istrstreams…Constructors for istrstream
Create an input stream with the string passed to constructor as input
istrstream::istrstream(char* buf);istrstream::istrstream(char* buf, int size);
istrstream::istrstream(char* buf);istrstream::istrstream(char* buf, int size);
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 23 -
Strstreamsostrstreams…
Constructors for ostrstream
Create an output stream with the string passed to constructor as input
ostrstream::ostrstream(char* buf, int size, int = ios::out);out - characters formatted into starting address of buffer
Write pointer positioned at start of bufferapp - characters appended to end of buffer
Write pointer positioned at null terminator at end of string
ostrstream::ostrstream(char* buf, int size, int = ios::out);out - characters formatted into starting address of buffer
Write pointer positioned at start of bufferapp - characters appended to end of buffer
Write pointer positioned at null terminator at end of string
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 24 -
Strstreams
ostrstreams…
The ostrstream will only allow size characters to be inserted
ostrstream does not automatically insert a null terminator into buffer….Special manipulator ends provided
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 25 -
Strstreams
ostrstreams and Storage Allocation
User Specified
char myBuffer[128];ostrstream myString(myBuffer, sizeof(myBuffer));myString << "Bonjour la Monde" << ends;
User Specified
char myBuffer[128];ostrstream myString(myBuffer, sizeof(myBuffer));myString << "Bonjour la Monde" << ends;
Automatic
ostrstream myString;// myString automatically allocates storage to hold the string.myString << " Bonjour la Monde” << ends;;
Automatic
ostrstream myString;// myString automatically allocates storage to hold the string.myString << " Bonjour la Monde” << ends;;
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 26 -
Strstreams
Accessing ostrstream Contents...
To access the string an ostrstream contains Use member function str( ) …..
….Returns a pointer to internal buffer holding the string
char* cp = A.str();char* cp = A.str();
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 27 -
Strstreams
Accessing ostrstream Contents and Freezing the Stream
Invoking member function str ( ) freezes the stream
Action causes ostrstream return pointer to its internal buffer
User invoking str ( ) is now responsible for managing the storage
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 28 -
Strstreams
Accessing ostrstream Contents and Unfreezing the Stream
Frozen stream can be unfrozen ... returns pointer to ostrstream
Syntax
ostrstreamInstance.rdbuff()->freeze(int arg = 1);arg – 0 Unfreeze the streamarg – 1 (or none) Freeze the stream
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 29 -
IO Streams
Overloading the Insertion Operator
When working with streams a particularly useful operator to overload is insertion operator
Can specify how to send data to standard out or to a file
Such ability can also be useful for debugging or saving the state of a program
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 30 -
IO Streams
Overloading the Insertion or Extraction Operators
When overloading insertion or extraction operator
Must support constructs of form
cout << A << B << C…cin >> J >> L >> M…
cout << A << B << C…cin >> J >> L >> M…
Exploring the C++ Stream LibraryExploring the C++ Stream Library
Copyright 2008 Oxford Consulting, Ltd 1 October 2008
- 31 -
IO Streams
Overloading the Insertion or Extraction Operators
Syntaxostream& operator<<(ostream& streamObject, const type& instance); streamObject - instance of a steam object passed by
reference instance - instance of a user defined variable
passed by const reference
Syntaxostream& operator<<(ostream& streamObject, const type& instance); streamObject - instance of a steam object passed by
reference instance - instance of a user defined variable
passed by const reference