我正在阅读一本关于应用c ++的书
需要二进制字符串类来收集和操作二进制文件 数据流。这些数据流可以代表图像中的任何内容 数据到对象的内容。这里作者也提到它就像 对象流或对象持久性。
作者对象流意味着什么。任何人都可以给我一个关于如何编写二进制字符串类的简单示例。
感谢您的时间和帮助。
答案 0 :(得分:1)
需要二进制字符串类来收集和操作二进制数据流。
这实质上意味着字符串(或流)可以包含任意数量的元素(二进制数据;位),它们可以表示任何内容,您可以通过使用该类来更改它们。
这些数据流可以表示从图像数据到对象内容的任何内容。
您可以随意使用流(通常仅受实现限制)。例如,您可以将原始图像数据加载到流对象中,然后读取单个字节。您也可以将单个字符写入流(或数组)并将其另存为原始图像数据。元素字符串/流不限制您进行任何单一解释。相反,实际的实现/接口定义了这一部分。
这里作者还提到它就像对象流或对象持久性。
“对象流”这里指的是转移某些东西。例如。通过网络或端口发送数据(例如,将其用作缓冲区以发送或接收数据)。 “对象持久性”是指即使程序不再运行(加载/保存),也要保留一些东西(让它保持不变)。
基本上,几乎任何流以及STL中可用的容器已经是作者认为的二进制字符串。不同之处仅在于分组,例如你能够访问/读/写单个位或只是字节/字/无论什么?
要获得真正的“比特流”,您可以使用像std::vector<bool>
这样简单的东西。这允许您存储布尔值,但您也可以将它们视为不同的东西(例如,通过将内容转换为整数数组来逐块读取它们)。
但是我会说一些简单的事情std::stream
甚至可以更好地匹配作者的描述:它可以用来保存持久数据,它可以用来传输数据,它可以用来以不同的格式/解释存储/加载数据。例如,您可以编写单个位或字节,然后将其作为整数或字符串读取。
答案 1 :(得分: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
,它可以处理二进制数据。