|
OpenTop 1.3 | |||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | Cross-Platform C++ | ||||
SUMMARY: CONSTRUCTOR | METHOD | DETAIL: CONSTRUCTOR | METHOD |
#include "ot/io/InputStream.h"
Unlike the standard C++ istream, this class does not concern itself with parsing or decoding, it just deals with the reading of bytes of data. In this respect it is closer to the C++ streambuf class - but avoids the complications of buffering or having an output capability.
InputStreams only concern themselves with the reading of bytes - not characters. If the application requires characters then an InputStream can be wrapped by an InputStreamReader that knows how the InputStream is encoded.
It is easy to construct your own class derived from InputStream. There are a small number of pure virtual methods for which a derived class must provide an implementation: available(), close() and read().
The following example opens an InputStream to read from a network resource and wraps it in an InputStreamReader to convert the byte stream into Unicode characters:-
try { const URL url(OT_T("http://www.elcel.com")); RefPtr<InputStream> rpIS = url.openStream(); // wrap the InputStream by an InputStreamReader to convert the // byte stream into Unicode characters RefPtr<Reader> rpReader(new InputStreamReader(rpIS.get()); CharType ch; while( (ch = rpReader->read()) != Reader::EndOfFile) { Console::cout() << ch; } } catch(Exception& e) { Console::cerr() << e.toString() << endl; }
Method Summary | |
virtual size_t |
available() Returns the number of bytes that can be read without blocking. |
virtual void |
close() Closes the InputStream. |
virtual void |
mark(size_t readLimit) Marks the current position in the byte stream. |
virtual bool |
markSupported() const Tests whether the InputStream supports the mark() operation. |
virtual int |
read() Reads and returns a single Byte or InputStream::EndOfFile. |
virtual long |
read(Byte* pBuffer, size_t bufLen)=0 Reads up to bufLen bytes into the supplied buffer. |
virtual void |
reset() Resets the position in the byte stream to a previously marked position. |
virtual size_t |
skip(size_t n) Reads and discards n bytes. |
Methods inherited from class ot::ManagedObject |
addRef, getRefCount, onFinalRelease, operator=, release |
Typedefs |
typedef int int_type
typedef Byte unit_type
Enumerations |
enum { |
EndOfFile = -1} |
/* End of byte stream reached */ |
Method Detail |
virtual size_t available()
Note, however, that the utility of this function is severely limited. Some sub-classes (e.g. FileInputStream) always return zero from available() and zero is also returned when the stream is at the end. For these reasons, it is rarely appropriate for an application to loop waiting for a positive return value from available().
IOException
- virtual void close()
IOException
- virtual void mark(size_t readLimit)
Supporting mark() implies that the InputStream must maintain an internal buffer containing all the bytes read from the point at which mark() was called. The size of this buffer is implementation dependent, but is guaranteed to hold at least readLimit bytes before it becomes full. When the buffer limit is exceeded, the marked position is automatically invalidated, with the result that subsequent reset() operations will fail.
Only one mark position is maintained by the InputStream. Further calls to mark() will establish a new mark position; reset() can only reset the position to the most recently established mark position.
readLimit
- IOException
- IOException
- virtual bool markSupported() const
virtual int read()
IOException
- virtual long read(Byte* pBuffer, size_t bufLen)=0
pBuffer
- bufLen
- IllegalArgumentException
- NullPointerException
- IOException
- virtual void reset()
IOException
- IOException
- IOException
- virtual size_t skip(size_t n)
n
- IOException
-
|
OpenTop 1.3 | |||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | Cross-Platform C++ | ||||
SUMMARY: CONSTRUCTOR | METHOD | DETAIL: CONSTRUCTOR | METHOD |