【发布时间】:2014-07-05 16:22:30
【问题描述】:
我有一个继承自 std::ostream 的自定义流 CFileManagerOStream,它从网络流类 CTcpStream 获取 Unicode UTF16 或 UTF32 字符串,并将它们作为 UTF8 字符串存储在磁盘上。这些字符串可能太大(可能是多个 TB),无法在内存中转换为 UTF8,所以我认为我需要为这项工作实现一个 C++ 流操纵器。我发现的所有操纵器示例都采用整个字符串并对其进行处理,由于内存要求低,在我的情况下不会这样做。我已经准备好所有的 Unicode 转换代码,我要解决的问题是用尽可能少的内存进行转换。
我希望像这样使用机械手;
CFileManagerOStream outFile("MultipleUtf8Strings.dat"); // Custom std::ostream
...
#ifdef _WINDOWS
CTcpStreamUtf16 largeBlobUtf16Stream;
...
outFile << ToUTF8FromUtf16 << largeBlobUtf16Stream;
#else
CTcpStreamUtf32 largeBlobUtf32Stream;
...
outFile << ToUTF8FromUtf32 << largeBlobUtf32Stream;
#endif
这是可能的还是我错误地接近这个?
【问题讨论】:
-
为什么不
out << ToUTtf8(large)- 将它包装到一个接受参数的操纵器类中? -
@DieterLücking 你有一个例子可以解决流式大数据集的问题吗?
标签: c++ stream ostream manipulators