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
|
---|