[433] | 1 | NameSpace System
|
---|
| 2 | NameSpace IO
|
---|
| 3 |
|
---|
| 4 | Class BinaryReader
|
---|
| 5 |
|
---|
| 6 | Public 'constructor
|
---|
| 7 | /*!
|
---|
| 8 | @date 2008/02/27
|
---|
| 9 | @auther NoWest
|
---|
| 10 | @brief BinaryReaderクラスの新しいインスタンスを初期化します。
|
---|
| 11 | @param 対象となるストリーム
|
---|
| 12 | */
|
---|
| 13 | Sub BinaryReader(input As Stream)
|
---|
| 14 | stream = input
|
---|
| 15 | coding = New System.Text.UTF8Encoding()
|
---|
| 16 | End Sub
|
---|
| 17 | /*!
|
---|
| 18 | @date 2008/02/27
|
---|
| 19 | @auther NoWest
|
---|
| 20 | @brief BinaryReaderクラスの新しいインスタンスを初期化します。
|
---|
| 21 | @param 対象となるストリーム
|
---|
| 22 | @param 文字列操作時のエンコーディングを指定
|
---|
| 23 | */
|
---|
| 24 | Sub BinaryReader(input As Stream, encoding As System.Text.Encoding)
|
---|
| 25 | This.stream = input
|
---|
| 26 | This.coding = encoding
|
---|
| 27 | End Sub
|
---|
| 28 |
|
---|
| 29 | Sub ~BinaryReader()
|
---|
| 30 | This.Close()
|
---|
| 31 | End Sub
|
---|
| 32 |
|
---|
| 33 | Public 'propaty
|
---|
| 34 | /*!
|
---|
| 35 | @date 2008/02/27
|
---|
| 36 | @auther NoWest
|
---|
| 37 | @brief BinaryReader の基になるストリームへのアクセスを公開します。
|
---|
| 38 | @return 基となったストリーム
|
---|
| 39 | */
|
---|
| 40 | Function BaseStream() As System.IO.Stream
|
---|
| 41 | Return stream
|
---|
| 42 | End Function
|
---|
| 43 |
|
---|
| 44 | Public 'method
|
---|
| 45 | /*!
|
---|
| 46 | @date 2008/02/27
|
---|
| 47 | @auther NoWest
|
---|
| 48 | @brief 現在のBinaryReaderの基となったストリームをクローズします。
|
---|
| 49 | */
|
---|
| 50 | Virtual Sub Close()
|
---|
| 51 | This.Dispose()
|
---|
| 52 | End Sub
|
---|
| 53 |
|
---|
| 54 | /*!
|
---|
| 55 | @date 2008/02/27
|
---|
| 56 | @auther NoWest
|
---|
| 57 | @brief BinaryReaderクラスで使われたリソースを解放します。
|
---|
| 58 | */
|
---|
| 59 | Virtual Sub Dispose()
|
---|
| 60 | This.Dispose(True)
|
---|
| 61 | End Sub
|
---|
| 62 |
|
---|
| 63 | /*!
|
---|
| 64 | @date 2008/02/27
|
---|
| 65 | @auther NoWest
|
---|
| 66 | @brief 読み取り可能な次の文字を返します。バイトの位置または文字の位置は変化しません。
|
---|
| 67 | @return 読み取り可能な次の文字
|
---|
| 68 | */
|
---|
| 69 | Virtual Function PeekChar() As Long
|
---|
| 70 | 'TODO
|
---|
| 71 | End Function
|
---|
| 72 |
|
---|
| 73 | /*!
|
---|
| 74 | @date 2008/02/27
|
---|
| 75 | @auther NoWest
|
---|
| 76 | @brief 基になるストリームからエンコーディングに従って文字を読み取り、ストリームの現在位置を進めます。
|
---|
| 77 | @return 読み込んだ文字
|
---|
| 78 | */
|
---|
| 79 | Virtual Function Read() As Long
|
---|
| 80 | End Function
|
---|
| 81 |
|
---|
| 82 | /*!
|
---|
| 83 | @date 2008/02/27
|
---|
| 84 | @auther NoWest
|
---|
| 85 | @brief 基になるストリームからデータを読み取り、ストリームの現在位置を進めます。
|
---|
| 86 | @param ストリームから読み込んだデータを格納するバッファ
|
---|
| 87 | @param データを格納するバッファの読み取り開始位置
|
---|
| 88 | @param 読み込むデータサイズ
|
---|
| 89 | @retval 実際に読み込んだデータのバイト数
|
---|
| 90 | @retval 0 ストリームの末尾に達している
|
---|
| 91 | */
|
---|
| 92 | Virtual Function Read(buffer As *Byte, index As Long, count As Long) As Long
|
---|
| 93 | Return This.stream.Read(buffer, index, count)
|
---|
| 94 | End Function
|
---|
| 95 |
|
---|
| 96 | /*!
|
---|
| 97 | @date 2008/02/27
|
---|
| 98 | @auther NoWest
|
---|
| 99 | @brief 基になるストリームから指定されたエンコーディングに従って文字列を読み取り、ストリームの現在位置を進めます。
|
---|
| 100 | @param ストリームから読み込んだ文字列を格納する文字列バッファ
|
---|
| 101 | @param データを格納する文字配列の読み取り開始位置
|
---|
| 102 | @param 読み込む文字の長さ
|
---|
| 103 | @retval 実際に読み込んだ合計文字数
|
---|
| 104 | @retval 0 ストリームの末尾に達している
|
---|
| 105 | */
|
---|
| 106 | Virtual Function Read(buffer As *Char, index As Long, count As Long) As Long
|
---|
| 107 | Return This.stream.Read(buffer As *Byte, index, count)
|
---|
| 108 | End Function
|
---|
| 109 |
|
---|
| 110 | /*!
|
---|
| 111 | @date 2008/02/27
|
---|
| 112 | @auther NoWest
|
---|
| 113 | @brief 現在のストリームから Boolean値を読み取り、ストリームの現在位置を 1 バイトだけ進めます。
|
---|
| 114 | @return 1byteのBoolean値
|
---|
| 115 | */
|
---|
| 116 | Virtual Function ReadBoolean() As Boolean
|
---|
| 117 | Return This.stream.ReadByte() As Boolean
|
---|
| 118 | End Function
|
---|
| 119 |
|
---|
| 120 | /*!
|
---|
| 121 | @date 2008/02/27
|
---|
| 122 | @auther NoWest
|
---|
| 123 | @brief 現在のストリームから次のバイトを読み取り、ストリームの現在位置を 1 バイトだけ進めます。
|
---|
| 124 | @return 符号無しの1バイト整数
|
---|
| 125 | */
|
---|
| 126 | Virtual Function ReadByte() As Byte
|
---|
| 127 | Return This.stream.ReadByte() As Byte
|
---|
| 128 | End Function
|
---|
| 129 |
|
---|
| 130 | '現在のストリームからバイト配列に count で指定したバイト数分のバイトを読み取り、count で指定したバイト数だけ現在位置を進めます。
|
---|
| 131 | /* Virtual Function ReadBytes() As Array<Byte>
|
---|
| 132 | TODO:
|
---|
| 133 | End Function*/
|
---|
| 134 |
|
---|
| 135 | '現在のストリームの次の文字を読み取り、使用した Encoding とストリームから読み取った特定の文字に従ってストリームの現在位置を進めます。
|
---|
| 136 | /* Virtual Function ReadChar() As Char
|
---|
| 137 | End Function*/
|
---|
| 138 |
|
---|
| 139 | '現在のストリームから count で指定した文字数分の文字を読み取り、そのデータを文字配列として返します。使用した Encoding とストリームから読み取った特定の文字に従って現在位置を進めます。
|
---|
| 140 | /* Virtual Function ReadChars() As Array<Char>
|
---|
| 141 | TODO:
|
---|
| 142 | End Function*/
|
---|
| 143 |
|
---|
| 144 | '現在のストリームから10進数値を読み取り、ストリームの現在位置を16バイトだけ進めます。
|
---|
| 145 | /* Virtual Function ReadDecimal() As ActiveBasic.COM.Decimal
|
---|
| 146 | TODO:
|
---|
| 147 | End Function*/
|
---|
| 148 |
|
---|
| 149 | /*!
|
---|
| 150 | @date 2008/02/27
|
---|
| 151 | @auther NoWest
|
---|
| 152 | @brief 現在のストリームから8バイト浮動小数点値を読み取り、ストリームの現在位置を8バイトだけ進めます。
|
---|
| 153 | @return 8バイト浮動小数点値
|
---|
| 154 | */
|
---|
| 155 | Virtual Function ReadDouble() As Double
|
---|
| 156 | Dim buffer As Double
|
---|
| 157 | This.stream.Read(VarPtr(buffer) As *Byte, 0, 8)
|
---|
| 158 | Return buffer
|
---|
| 159 | End Function
|
---|
| 160 |
|
---|
| 161 | /*!
|
---|
| 162 | @date 2008/02/27
|
---|
| 163 | @auther NoWest
|
---|
| 164 | @brief 現在のストリームから2バイト符号付き整数を読み取り、ストリームの現在位置を2バイトだけ進めます。
|
---|
| 165 | @return 2バイト符号付き整数値
|
---|
| 166 | */
|
---|
| 167 | Virtual Function ReadInt16() As Integer
|
---|
| 168 | Dim buffer As Integer
|
---|
| 169 | This.stream.Read(VarPtr(buffer) As *Byte, 0, 2)
|
---|
| 170 | Return buffer
|
---|
| 171 | End Function
|
---|
| 172 |
|
---|
| 173 | /*!
|
---|
| 174 | @date 2008/02/27
|
---|
| 175 | @auther NoWest
|
---|
| 176 | @brief 現在のストリームから4バイト符号付き整数を読み取り、ストリームの現在位置を4バイトだけ進めます。
|
---|
| 177 | @return 4バイト符号付き整数値
|
---|
| 178 | */
|
---|
| 179 | Virtual Function ReadInt32() As Long
|
---|
| 180 | Dim buffer As Long
|
---|
| 181 | This.stream.Read(VarPtr(buffer) As *Byte, 0, 4)
|
---|
| 182 | Return buffer
|
---|
| 183 | End Function
|
---|
| 184 |
|
---|
| 185 | /*!
|
---|
| 186 | @date 2008/02/27
|
---|
| 187 | @auther NoWest
|
---|
| 188 | @brief 現在のストリームから8バイト符号付き整数を読み取り、ストリームの現在位置を8バイトだけ進めます。
|
---|
| 189 | @return 8バイト符号付き整数値
|
---|
| 190 | */
|
---|
| 191 | Virtual Function ReadInt64() As Int64
|
---|
| 192 | Dim buffer As Int64
|
---|
| 193 | This.stream.Read(VarPtr(buffer) As *Byte, 0, 8)
|
---|
| 194 | Return buffer
|
---|
| 195 | End Function
|
---|
| 196 |
|
---|
| 197 | /*!
|
---|
| 198 | @date 2008/02/27
|
---|
| 199 | @auther NoWest
|
---|
| 200 | @brief 現在のストリームから符号付きバイトを読み取り、ストリームの現在位置を1バイトだけ進めます。
|
---|
| 201 | @return 1バイト符号付き整数値
|
---|
| 202 | */
|
---|
| 203 | Virtual Function ReadSByte() As SByte
|
---|
| 204 | Dim buffer As SByte
|
---|
| 205 | This.stream.Read(VarPtr(buffer) As *Byte, 0, 1)
|
---|
| 206 | Return buffer
|
---|
| 207 | End Function
|
---|
| 208 |
|
---|
| 209 | /*!
|
---|
| 210 | @date 2008/02/27
|
---|
| 211 | @auther NoWest
|
---|
| 212 | @brief 現在のストリームから4バイト浮動小数点値を読み取り、ストリームの現在位置を4バイトだけ進めます。
|
---|
| 213 | @return 4バイト浮動小数点値
|
---|
| 214 | */
|
---|
| 215 | Virtual Function ReadSingle() As Single
|
---|
| 216 | Dim buffer As Single
|
---|
| 217 | This.stream.Read(VarPtr(buffer) As *Byte, 0, 4)
|
---|
| 218 | Return buffer
|
---|
| 219 | End Function
|
---|
| 220 |
|
---|
| 221 | /*!
|
---|
| 222 | @date 2008/02/27
|
---|
| 223 | @auther NoWest
|
---|
| 224 | @brief 現在のストリームから文字列を読み取ります。文字列の先頭に長さを付け、7ビットの整数としてまとめてエンコードします。
|
---|
| 225 | @return String値
|
---|
| 226 | */
|
---|
| 227 | Virtual Function ReadString() As String
|
---|
| 228 | Return ""
|
---|
| 229 | End Function
|
---|
| 230 |
|
---|
| 231 | /*!
|
---|
| 232 | @date 2008/02/27
|
---|
| 233 | @auther NoWest
|
---|
| 234 | @brief リトルエンディアンエンコーディングを使用して現在のストリームから2バイト符号なし整数を読み取り、ストリームの位置を2バイトだけ進めます。
|
---|
| 235 | @return 2バイト符号なし整数値
|
---|
| 236 | */
|
---|
| 237 | Virtual Function ReadUInt16() As Word
|
---|
| 238 | Dim buffer As Word
|
---|
| 239 | This.stream.Read(VarPtr(buffer) As *Byte, 0, 2)
|
---|
| 240 | Return buffer
|
---|
| 241 | End Function
|
---|
| 242 |
|
---|
| 243 | /*!
|
---|
| 244 | @date 2008/02/27
|
---|
| 245 | @auther NoWest
|
---|
| 246 | @brief 現在のストリームから4バイト符号なし整数を読み取り、ストリームの位置を4バイトだけ進めます。
|
---|
| 247 | @return 4バイト符号なし整数値
|
---|
| 248 | */
|
---|
| 249 | Virtual Function ReadUInt32() As DWord
|
---|
| 250 | Dim buffer As DWord
|
---|
| 251 | This.stream.Read(VarPtr(buffer) As *Byte, 0, 4)
|
---|
| 252 | Return buffer
|
---|
| 253 | End Function
|
---|
| 254 |
|
---|
| 255 | /*!
|
---|
| 256 | @date 2008/02/27
|
---|
| 257 | @auther NoWest
|
---|
| 258 | @brief 現在のストリームから8バイト符号なし整数を読み取り、ストリームの位置を8バイトだけ進めます。
|
---|
| 259 | @return 8バイト符号なし整数値
|
---|
| 260 | */
|
---|
| 261 | Virtual Function ReadUInt64() As QWord
|
---|
| 262 | Dim buffer As QWord
|
---|
| 263 | This.stream.Read(VarPtr(buffer) As *Byte, 0, 8)
|
---|
| 264 | Return buffer
|
---|
| 265 | End Function
|
---|
| 266 |
|
---|
| 267 | Protected 'method
|
---|
| 268 | 'BinaryReader によって使用されているアンマネージ リソースを解放し、オプションでマネージリソースも解放します。
|
---|
| 269 | Virtual Sub Dispose(disposing As Boolean)
|
---|
| 270 | This.stream.Close()
|
---|
| 271 | End Sub
|
---|
| 272 |
|
---|
| 273 | '指定したバイト数分だけストリームから読み取ったバイトを内部バッファに格納します。
|
---|
| 274 | Virtual Sub FillBuffer(numBytes As Long)
|
---|
| 275 | 'TODO:
|
---|
| 276 | End Sub
|
---|
| 277 |
|
---|
| 278 | ' Read7BitEncodedInt 32 ビット整数を圧縮形式で読み取ります。
|
---|
| 279 |
|
---|
| 280 | Private
|
---|
| 281 | stream As Stream
|
---|
| 282 | coding As System.Text.Encoding
|
---|
| 283 | End Class
|
---|
| 284 |
|
---|
| 285 | End Namespace
|
---|
| 286 | End Namespace
|
---|