0

我正在阅读一本关于应用 C++ 的书

需要二进制字符串类来收集和处理二进制数据流。这些数据流可以表示从图像数据到对象内容的任何内容。这里作者还提到它就像对象流或对象持久性。

作者所说的对象流是什么意思。谁能给我一个简单的例子来说明我们如何编写二进制字符串类。

感谢您的时间和帮助。

4

2 回答 2

1

需要二进制字符串类来收集和操作二进制数据流。

这实质上意味着字符串(或流)可以包含任意数量的元素(二进制数据;位),它们可以表示任何内容,您可以使用类来更改它们。

这些数据流可以表示从图像数据到对象内容的任何内容。

您可以随心所欲地使用流(通常仅受实现限制)。例如,您可以将原始图像数据加载到流对象中,然后读取单个字节。您也可以将单个字符写入流(或数组)并将其保存为原始图像数据。基本字符串/流不会将您限制为任何单一的解释。相反,实际的实现/接口定义了这部分。

这里作者还提到它就像对象流或对象持久性。

这里的“对象流”是指传输某些东西。例如,通过网络或端口发送数据(例如,将其用作发送或接收数据的缓冲区)。“对象持久性”是指即使您的程序不再运行(加载/保存),也保留一些东西(让它持久化)。


本质上,几乎任何流以及 STL 中可用的容器都已经是作者认为的二进制字符串。区别只是分组,例如,您是否能够访问/读/写单个位或只是字节/字/什么?

要获得真正的“比特流”,您可以使用简单的std::vector<bool>. 这允许您存储布尔值,但您也可以将它们作为不同的东西来读取(例如,通过将内容转换为整数数组来逐块读取它们)。

但我想说的简单的std::stream话更符合作者的描述:它可以用来保存持久数据,它可以用来传输数据,它可以用来存储/加载不同格式的数据/解释。例如,您可以写入单个位或字节,然后将它们作为整数甚至字符串读取。

于 2013-07-23T14:23:29.083 回答
0

作者所说的对象流是什么意思。

它们意味着从程序的一部分发送对对象的值进行编码的输出,以便接收代码可以构造具有等效值的对象。这很像持久性(例如,将对象保存到磁盘,以便稍后加载),除了数据不一定放在持久性的某个地方(因此如果电源关闭,它可能会丢失),但它会到达其他地方立即有效执行重新加载步骤的代码。

例如,没有生产级别的错误检查:

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,它可以处理二进制数据。

于 2013-07-23T14:14:29.560 回答