NameSpace System NameSpace IO Class BinaryReader Public 'constructor /*! @date 2008/02/27 @auther NoWest @brief BinaryReaderクラスの新しいインスタンスを初期化します。 @param 対象となるストリーム */ Sub BinaryReader(input As Stream) stream = input coding = New System.Text.UTF8Encoding() End Sub /*! @date 2008/02/27 @auther NoWest @brief BinaryReaderクラスの新しいインスタンスを初期化します。 @param 対象となるストリーム @param 文字列操作時のエンコーディングを指定 */ Sub BinaryReader(input As Stream, encoding As System.Text.Encoding) This.stream = input This.coding = encoding End Sub Sub ~BinaryReader() This.Close() End Sub Public 'propaty /*! @date 2008/02/27 @auther NoWest @brief BinaryReader の基になるストリームへのアクセスを公開します。 @return 基となったストリーム */ Function BaseStream() As System.IO.Stream Return stream End Function Public 'method /*! @date 2008/02/27 @auther NoWest @brief 現在のBinaryReaderの基となったストリームをクローズします。 */ Virtual Sub Close() This.Dispose() End Sub /*! @date 2008/02/27 @auther NoWest @brief BinaryReaderクラスで使われたリソースを解放します。 */ Virtual Sub Dispose() This.Dispose(True) End Sub /*! @date 2008/02/27 @auther NoWest @brief 読み取り可能な次の文字を返します。バイトの位置または文字の位置は変化しません。 @return 読み取り可能な次の文字 */ Virtual Function PeekChar() As Long 'TODO End Function /*! @date 2008/02/27 @auther NoWest @brief 基になるストリームからエンコーディングに従って文字を読み取り、ストリームの現在位置を進めます。 @return 読み込んだ文字 */ Virtual Function Read() As Long End Function /*! @date 2008/02/27 @auther NoWest @brief 基になるストリームからデータを読み取り、ストリームの現在位置を進めます。 @param ストリームから読み込んだデータを格納するバッファ @param データを格納するバッファの読み取り開始位置 @param 読み込むデータサイズ @retval 実際に読み込んだデータのバイト数 @retval 0 ストリームの末尾に達している */ Virtual Function Read(buffer As *Byte, index As Long, count As Long) As Long Return This.stream.Read(buffer, index, count) End Function /*! @date 2008/02/27 @auther NoWest @brief 基になるストリームから指定されたエンコーディングに従って文字列を読み取り、ストリームの現在位置を進めます。 @param ストリームから読み込んだ文字列を格納する文字列バッファ @param データを格納する文字配列の読み取り開始位置 @param 読み込む文字の長さ @retval 実際に読み込んだ合計文字数 @retval 0 ストリームの末尾に達している */ Virtual Function Read(buffer As *Char, index As Long, count As Long) As Long Return This.stream.Read(buffer As *Byte, index, count) End Function /*! @date 2008/02/27 @auther NoWest @brief 現在のストリームから Boolean値を読み取り、ストリームの現在位置を 1 バイトだけ進めます。 @return 1byteのBoolean値 */ Virtual Function ReadBoolean() As Boolean Return This.stream.ReadByte() As Boolean End Function /*! @date 2008/02/27 @auther NoWest @brief 現在のストリームから次のバイトを読み取り、ストリームの現在位置を 1 バイトだけ進めます。 @return 符号無しの1バイト整数 */ Virtual Function ReadByte() As Byte Return This.stream.ReadByte() As Byte End Function '現在のストリームからバイト配列に count で指定したバイト数分のバイトを読み取り、count で指定したバイト数だけ現在位置を進めます。 /* Virtual Function ReadBytes() As Array TODO: End Function*/ '現在のストリームの次の文字を読み取り、使用した Encoding とストリームから読み取った特定の文字に従ってストリームの現在位置を進めます。 /* Virtual Function ReadChar() As Char End Function*/ '現在のストリームから count で指定した文字数分の文字を読み取り、そのデータを文字配列として返します。使用した Encoding とストリームから読み取った特定の文字に従って現在位置を進めます。 /* Virtual Function ReadChars() As Array TODO: End Function*/ '現在のストリームから10進数値を読み取り、ストリームの現在位置を16バイトだけ進めます。 /* Virtual Function ReadDecimal() As ActiveBasic.COM.Decimal TODO: End Function*/ /*! @date 2008/02/27 @auther NoWest @brief 現在のストリームから8バイト浮動小数点値を読み取り、ストリームの現在位置を8バイトだけ進めます。 @return 8バイト浮動小数点値 */ Virtual Function ReadDouble() As Double Dim buffer As Double This.stream.Read(VarPtr(buffer) As *Byte, 0, 8) Return buffer End Function /*! @date 2008/02/27 @auther NoWest @brief 現在のストリームから2バイト符号付き整数を読み取り、ストリームの現在位置を2バイトだけ進めます。 @return 2バイト符号付き整数値 */ Virtual Function ReadInt16() As Integer Dim buffer As Integer This.stream.Read(VarPtr(buffer) As *Byte, 0, 2) Return buffer End Function /*! @date 2008/02/27 @auther NoWest @brief 現在のストリームから4バイト符号付き整数を読み取り、ストリームの現在位置を4バイトだけ進めます。 @return 4バイト符号付き整数値 */ Virtual Function ReadInt32() As Long Dim buffer As Long This.stream.Read(VarPtr(buffer) As *Byte, 0, 4) Return buffer End Function /*! @date 2008/02/27 @auther NoWest @brief 現在のストリームから8バイト符号付き整数を読み取り、ストリームの現在位置を8バイトだけ進めます。 @return 8バイト符号付き整数値 */ Virtual Function ReadInt64() As Int64 Dim buffer As Int64 This.stream.Read(VarPtr(buffer) As *Byte, 0, 8) Return buffer End Function /*! @date 2008/02/27 @auther NoWest @brief 現在のストリームから符号付きバイトを読み取り、ストリームの現在位置を1バイトだけ進めます。 @return 1バイト符号付き整数値 */ Virtual Function ReadSByte() As SByte Dim buffer As SByte This.stream.Read(VarPtr(buffer) As *Byte, 0, 1) Return buffer End Function /*! @date 2008/02/27 @auther NoWest @brief 現在のストリームから4バイト浮動小数点値を読み取り、ストリームの現在位置を4バイトだけ進めます。 @return 4バイト浮動小数点値 */ Virtual Function ReadSingle() As Single Dim buffer As Single This.stream.Read(VarPtr(buffer) As *Byte, 0, 4) Return buffer End Function /*! @date 2008/02/27 @auther NoWest @brief 現在のストリームから文字列を読み取ります。文字列の先頭に長さを付け、7ビットの整数としてまとめてエンコードします。 @return String値 */ Virtual Function ReadString() As String Return "" End Function /*! @date 2008/02/27 @auther NoWest @brief リトルエンディアンエンコーディングを使用して現在のストリームから2バイト符号なし整数を読み取り、ストリームの位置を2バイトだけ進めます。 @return 2バイト符号なし整数値 */ Virtual Function ReadUInt16() As Word Dim buffer As Word This.stream.Read(VarPtr(buffer) As *Byte, 0, 2) Return buffer End Function /*! @date 2008/02/27 @auther NoWest @brief 現在のストリームから4バイト符号なし整数を読み取り、ストリームの位置を4バイトだけ進めます。 @return 4バイト符号なし整数値 */ Virtual Function ReadUInt32() As DWord Dim buffer As DWord This.stream.Read(VarPtr(buffer) As *Byte, 0, 4) Return buffer End Function /*! @date 2008/02/27 @auther NoWest @brief 現在のストリームから8バイト符号なし整数を読み取り、ストリームの位置を8バイトだけ進めます。 @return 8バイト符号なし整数値 */ Virtual Function ReadUInt64() As QWord Dim buffer As QWord This.stream.Read(VarPtr(buffer) As *Byte, 0, 8) Return buffer End Function Protected 'method 'BinaryReader によって使用されているアンマネージ リソースを解放し、オプションでマネージリソースも解放します。 Virtual Sub Dispose(disposing As Boolean) This.stream.Close() End Sub '指定したバイト数分だけストリームから読み取ったバイトを内部バッファに格納します。 Virtual Sub FillBuffer(numBytes As Long) 'TODO: End Sub ' Read7BitEncodedInt 32 ビット整数を圧縮形式で読み取ります。 Private stream As Stream coding As System.Text.Encoding End Class End Namespace End Namespace