00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef __io_FileInputStream__
00037 #define __io_FileInputStream__
00038
00039 #include <stdnet/system/Abstract>
00040 #include <stdnet/io/IOException>
00041 #include <stdnet/io/InputStream>
00042 #include <stdnet/system/Object>
00043 #include <stdnet/config.h>
00044
00045 namespace stdbase {
00046 namespace io {
00047
00051 class FileInputStream :
00052 public system::Object,
00053 public InputStream
00054 {
00055 protected:
00060 FileInputStream( ::stdbase::system::StringRef name);
00061
00066 FileInputStream( const ::stdbase::system::platform::FileDescriptor &fd);
00067
00071 virtual ~FileInputStream();
00072
00073 public:
00078 static system::reference< FileInputStream >
00079 create( system::StringRef name );
00080
00084 static system::reference< FileInputStream >
00085 create( const system::platform::FileDescriptor & fd);
00086
00091 virtual int
00092 available() throw (IOException);
00093
00097 virtual void
00098 close() throw (IOException);
00099
00108 virtual void
00109 mark( int readlimit);
00110
00119 virtual void
00120 reset() throw (IOException);
00121
00126 virtual bool
00127 markSupported();
00128
00132 virtual int
00133 read( byte buffer[], int len) throw (IOException);
00134
00141 virtual int
00142 read() throw (IOException);
00143
00149 virtual long
00150 skip( long n ) throw (IOException);
00151
00152 private:
00153 enum { DATA_BUFFER_SIZE = 512 };
00154
00155 system::platform::FileDescriptor input;
00156
00157 byte data_buffer[ DATA_BUFFER_SIZE ];
00158 int position;
00159 int length;
00160 };
00161
00162 typedef system::reference< FileInputStream > FileInputStreamRef;
00163
00164 }
00165 }
00166
00167 #endif // __io_FileInputStream__
00168