acl
3.5.3.0
istream.hpp
浏览该文件的文档.
1
#pragma once
2
#include "../acl_cpp_define.hpp"
3
#include <stdlib.h>
4
#include "
stream.hpp
"
5
6
namespace
acl
{
7
8
class
string;
9
10
/**
11
* 输入流操作类,如果想确切知道输入流是否关闭或出错或读到了文件流的
12
* 尾部,应通过调用 stream->eof() 来进行判断
13
*/
14
15
class
ACL_CPP_API
istream
:
virtual
public
stream
16
{
17
public
:
18
istream
(
void
) {}
19
virtual
~istream
(
void
) {}
20
21
/**
22
* 从输入流中读数据
23
* @param buf {void*} 用户缓冲区
24
* @param size {size_t} 用户缓冲区长度
25
* @param loop {bool} 是否读满 size 后才返回
26
* @return {int} 读操作结果, -1 表示关闭或出错, > 0 表示成功
27
*/
28
int
read(
void
* buf,
size_t
size,
bool
loop =
true
);
29
30
/**
31
* 从输入流读数据直至读到所要求的字符串或出错才返回
32
* @param buf {void*} 用户缓冲区
33
* @param inout {size_t*} 作为参数时 *inout 表示缓冲 buf
34
* 的空间大小,函数返回后记录存储于 buf 中的数据长度
35
* @param tag {const char*} 要求读到的字符串
36
* @param len {size_t} tag 字符串的长度
37
* @return {bool} 是否读到所要求的字符串数据
38
*/
39
40
bool
readtags(
void
*buf,
size_t
* inout,
const
char
*tag,
size_t
len);
41
42
/**
43
* 从输入流中读到一行数据
44
* @param buf {void*} 用户缓冲区
45
* @param size_inout {size_t*} 作为参数时 *size_inout 表示缓冲 buf
46
* 的空间大小,函数返回后记录存储于 buf 中的数据长度
47
* @param nonl {bool} 如果为 true 则会将读到的一行数据尾部的 "\r\n"
48
* 或 "\n" 去掉,*size_inout 存储的数据长度是去掉 "\r\n" 或 "\n" 后
49
* 的长度;否则,保留数据行中的 "\r\n" 或 "\n",同时 *size_inout 存
50
* 储的是包含 "\r\n" 或 "\n" 的数据长度
51
* @return {bool} 是否读到了一行数据, 出错则返回 false; 对文件输入流而
52
* 言,如果读到的数据是最后一部分数据且这部分数据不含 "\r\n" 或 "\n"
53
* 则也会返回 false, 调用者需要检查 *size_inout 值是否大于 0
54
* 来确定是否读到了最后一部分数据
55
*/
56
bool
gets(
void
* buf,
size_t
* size_inout,
bool
nonl =
true
);
57
58
/**
59
* 从输入流中读一个 64 位整数
60
* @param n {acl_int64&} 64 位整数
61
* @param loop {bool} 是否阻塞式读完8个字节
62
* @return {bool} 是否读取成功
63
*/
64
#if defined(_WIN32) || defined(_WIN64)
65
bool
read(__int64& n,
bool
loop =
true
);
66
#else
67
bool
read(
long
long
int
& n,
bool
loop =
true
);
68
#endif
69
70
/**
71
* 从输入流中读一个 32 位整数
72
* @param n {int&} 32 位整数
73
* @param loop {bool} 是否阻塞式读完4个字节
74
* @return {bool} 是否读取成功
75
*/
76
bool
read(
int
& n,
bool
loop =
true
);
77
78
/**
79
* 从输入流中读一个 16 位整数
80
* @param n {short&} 16 位整数
81
* @param loop {bool} 是否阻塞式读完2个字节
82
* @return {bool} 是否读取成功
83
*/
84
bool
read(
short
& n,
bool
loop =
true
);
85
86
/**
87
* 从输入流中读取一个字节
88
* @param ch {char&}
89
* @return {bool} 读取是否成功
90
*/
91
bool
read(
char
& ch);
92
93
/**
94
* 从输入流中读数据至缓冲区中
95
* @param s {string*} 缓冲区,内部会首先自动清空该缓冲区
96
* @param loop {bool} 是否阻塞式读满整个缓冲,缓冲区
97
* 的容量为 s.capacity()
98
* @return {bool} 读数据是否成功
99
*/
100
bool
read(
string
& s,
bool
loop =
true
);
101
bool
read(
string
* s,
bool
loop =
true
);
102
103
/**
104
* 从输入流中读数据至缓冲区中
105
* @param s {string*} 缓冲区,内部会首先自动清空该缓冲区
106
* @param max {size_t} 希望读到的数据的最大值
107
* @param loop {bool} 是否读到要求的 max 字节数为止
108
* @return {bool} 读数据是否成功
109
*/
110
bool
read(
string
& s,
size_t
max,
bool
loop =
true
);
111
bool
read(
string
* s,
size_t
max,
bool
loop =
true
);
112
113
/**
114
* 从输入流中读一行数据至缓冲区中
115
* @param s {string&} 缓冲区,内部会首先自动清空该缓冲区
116
* @param nonl {bool} 是否保留所读行数据中的 "\r\n" 或 "\n"
117
* @param max {size_t} 当该值 > 0 时,该值限定了所读到行的最大值,当
118
* 接收到数据行长度大于该值时,则仅返回部分数据,同时内部会记录警告;
119
* 当该值 = 0 时,则不限制行数据长度
120
* @return {bool} 是否读到了一行数据
121
* 1)如果返回 true 则说明读到了完整一行数据;如果该行数据中只有
122
* "\r\n" 或 "\n",则 s 的内容为空,即:s.empty() == true
123
* 2)如果返回 false 则说明读关闭且未读到一行数据,此时 s 中有可能
124
* 存储着部分数据,需要用 if (s.empty() == true) 判断一下
125
*/
126
bool
gets(
string
& s,
bool
nonl =
true
,
size_t
max = 0);
127
bool
gets(
string
* s,
bool
nonl =
true
,
size_t
max = 0);
128
129
/**
130
* 从输入流中读数据直到读到要求的字符串数据作为分隔符的数据,
131
* 读取的数据的最后部分应该是该字符串
132
* @param s {string&} 缓冲区,内部会首先自动清空该缓冲区
133
* @param tag {const string&} 要求读的字符串数据
134
* @return {bool} 是否读到要求的字符串数据
135
*/
136
bool
readtags(
string
& s,
const
string
& tag);
137
bool
readtags(
string
* s,
const
string
& tag);
138
139
/**
140
* 从输入流中读一个字节数据
141
* @return {int} 所读字节的 ASCII 码值,如果返回值为 -1 则表示对方关闭或
142
* 读出错
143
*/
144
int
getch(
void
);
145
146
/**
147
* 向输入流中放加一个字节的数据
148
* @param ch {int} 一个字符的 ASCII 码值
149
* @return {int} 如果返回值与 ch 值相同则表示正确,否则表示出错
150
*/
151
int
ugetch(
int
ch);
152
153
/**
154
* 尝试性从输入流中读取一行数据
155
* @param buf {string&} 缓冲区
156
* @param nonl {bool} 是否保留所读行数据中的 "\r\n" 或 "\n"
157
* @param clear {bool} 是否内部自动清空 buf 缓冲区
158
* @param max {int} 当该值 > 0 时则设置所读行数据的最大长度以避免本地
159
* 缓冲区溢出
160
* @return {bool} 是否读了一行数据; 如果返回 false 并不表示输入
161
* 流结束,只是表示未读到一个完整行数据,应该通过调用 stream->eof()
162
* 来检查输入流是否关闭,另外,如果仅读到了部分数据,则 buf 会存储
163
* 这些部分数据
164
* 注意:为了防止 buf 缓冲区溢出,调用者调用该方法获得的数据即使不够
165
* 一行数据,应尽量取出 buf 中的数据然后将 buf->clear(),以防止 buf
166
* 内存过大导致缓冲区溢出
167
*/
168
bool
gets_peek(
string
& buf,
bool
nonl =
true
,
169
bool
clear =
false
,
int
max = 0);
170
bool
gets_peek(
string
* buf,
bool
nonl =
true
,
171
bool
clear =
false
,
int
max = 0);
172
173
/**
174
* 尝试性从输入流中读取数据
175
* @param buf {string&} 缓冲区
176
* @param clear {bool} 函数开始时是否内部自动清空 buf 缓冲区
177
* @return {bool} 是否读到数据, 如果返回 false 仅 表示未读完所要求
178
* 的数据长度,应该通过调用 stream->eof() 来检查输入流是否关闭
179
* 注意:为了防止 buf 缓冲区溢出,调用者调用该方法获得的数据即使不够
180
* 一行数据,应尽量取出 buf 中的数据然后将 buf->clear(),以防止 buf
181
* 内存过大导致缓冲区溢出
182
*/
183
bool
read_peek(
string
& buf,
bool
clear =
false
);
184
bool
read_peek(
string
* buf,
bool
clear =
false
);
185
186
/**
187
* 尝试性从输入流中读取数据
188
* @param buf {void*} 缓冲区
189
* @param size {size_t} buf 缓冲区大小
190
* @return {int} 返回 -1 表示读出错或关闭,> 0 表示读到的数据长度,
191
* 如果返回 0 表示本次没有读到数据,可以继续读,当返回值 < 0 时,
192
* 可通过 eof() 判断流是否应该关闭
193
*/
194
int
read_peek(
void
* buf,
size_t
size);
195
196
/**
197
* 尝试性从输入流中读取指定长度的数据
198
* @param buf {string&} 缓冲区
199
* @param cnt {size_t} 要求读到的数据长度
200
* @param clear {bool} 函数开始时是否内部自动清空 buf 缓冲区
201
* @return {bool} 是否读到所要求数据长度的数据, 如果返回 false 仅
202
* 表示未读完所要求的数据长度,应该通过调用 stream->eof() 来检查
203
* 输入流是否关闭
204
* 注意:为了防止 buf 缓冲区溢出,调用者调用该方法获得的数据即使不够
205
* 一行数据,应尽量取出 buf 中的数据然后将 buf->clear(),以防止 buf
206
* 内存过大导致缓冲区溢出
207
*/
208
bool
readn_peek(
string
& buf,
size_t
cnt,
bool
clear =
false
);
209
bool
readn_peek(
string
* buf,
size_t
cnt,
bool
clear =
false
);
210
211
/* 以下几个函数重载了输入操作符,它们都是阻塞式操作过程,且需要
212
* 调用 stream->eof() 来判断输入流是否关闭或是否读到了文件尾
213
*/
214
215
istream
& operator>>(
string
& s);
216
#if defined(_WIN32) || defined(_WIN64)
217
istream
& operator>>(__int64& n);
218
#else
219
istream
& operator>>(
long
long
int
& n);
220
#endif
221
istream
& operator>>(
int
& n);
222
istream
& operator>>(
short
& n);
223
istream
& operator>>(
char
& ch);
224
};
225
226
}
// namespace acl
acl::istream
Definition:
istream.hpp:15
acl::istream::istream
istream(void)
Definition:
istream.hpp:18
acl
Definition:
acl_cpp_init.hpp:4
acl::istream::~istream
virtual ~istream(void)
Definition:
istream.hpp:19
acl::stream
Definition:
stream.hpp:24
ACL_CPP_API
#define ACL_CPP_API
Definition:
acl_cpp_define.hpp:16
stream.hpp
include
acl_cpp
stream
istream.hpp
生成于 2021年 九月 10日 星期五 11:14:45 , 为 acl使用
1.8.15