我正在阅读一本关于应用 C++ 的书
需要二进制字符串类来收集和处理二进制数据流。这些数据流可以表示从图像数据到对象内容的任何内容。这里作者还提到它就像对象流或对象持久性。
作者所说的对象流是什么意思。谁能给我一个简单的例子来说明我们如何编写二进制字符串类。
感谢您的时间和帮助。
我正在阅读一本关于应用 C++ 的书
需要二进制字符串类来收集和处理二进制数据流。这些数据流可以表示从图像数据到对象内容的任何内容。这里作者还提到它就像对象流或对象持久性。
作者所说的对象流是什么意思。谁能给我一个简单的例子来说明我们如何编写二进制字符串类。
感谢您的时间和帮助。
需要二进制字符串类来收集和操作二进制数据流。
这实质上意味着字符串(或流)可以包含任意数量的元素(二进制数据;位),它们可以表示任何内容,您可以使用类来更改它们。
这些数据流可以表示从图像数据到对象内容的任何内容。
您可以随心所欲地使用流(通常仅受实现限制)。例如,您可以将原始图像数据加载到流对象中,然后读取单个字节。您也可以将单个字符写入流(或数组)并将其保存为原始图像数据。基本字符串/流不会将您限制为任何单一的解释。相反,实际的实现/接口定义了这部分。
这里作者还提到它就像对象流或对象持久性。
这里的“对象流”是指传输某些东西。例如,通过网络或端口发送数据(例如,将其用作发送或接收数据的缓冲区)。“对象持久性”是指即使您的程序不再运行(加载/保存),也保留一些东西(让它持久化)。
本质上,几乎任何流以及 STL 中可用的容器都已经是作者认为的二进制字符串。区别只是分组,例如,您是否能够访问/读/写单个位或只是字节/字/什么?
要获得真正的“比特流”,您可以使用简单的std::vector<bool>
. 这允许您存储布尔值,但您也可以将它们作为不同的东西来读取(例如,通过将内容转换为整数数组来逐块读取它们)。
但我想说的简单的std::stream
话更符合作者的描述:它可以用来保存持久数据,它可以用来传输数据,它可以用来存储/加载不同格式的数据/解释。例如,您可以写入单个位或字节,然后将它们作为整数甚至字符串读取。
作者所说的对象流是什么意思。
它们意味着从程序的一部分发送对对象的值进行编码的输出,以便接收代码可以构造具有等效值的对象。这很像持久性(例如,将对象保存到磁盘,以便稍后加载),除了数据不一定放在持久性的某个地方(因此如果电源关闭,它可能会丢失),但它会到达其他地方立即有效执行重新加载步骤的代码。
例如,没有生产级别的错误检查:
struct X { int a; int b; };
std::ostream& operator<<(std::ostream& os, const X& x)
{ return os << x.a << ' ' << x.b; }
std::istream& operator>>(std::istream& is, X& x)
{ return is >> x.a >> x.b; }
X x1 = ...;
std::istringstream iss;
iss << x1;
X x2;
if (iss >> x)
assert(x2 == x1);
谁能给我一个简单的例子来说明我们如何编写二进制字符串类。
您不必...标准包括std::string
,它可以处理二进制数据。