source: trunk/ab5.0/ablib/src/Classes/System/IO/BinaryReader.ab@ 553

Last change on this file since 553 was 553, checked in by NoWest, 16 years ago

BinaryReaderとBinaryWriterを文字列操作以外は一応実装完了。

File size: 7.8 KB
Line 
1NameSpace System
2NameSpace IO
3
4Class BinaryReader
5
6Public '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 enc = 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.enc = encoding
27 End Sub
28
29 Sub ~BinaryReader()
30 This.Close()
31 End Sub
32
33Public '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
44Public '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
267Protected '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
280Private
281 stream As Stream
282 enc As System.Text.Encoding
283End Class
284
285End Namespace
286End Namespace
Note: See TracBrowser for help on using the repository browser.