embarcadero/borland TMemoryStream和TFileStream的标准C++等价物是什么?
What are the standard C++ equivalents for embarcadero/borland TMemoryStream and TFileStream?
我找到了遗留源代码,在这里摘录 -
TMemoryStream *DFile = new TMemoryStream;
TFileStream*BFile = new TFileStream;
以下是上述类别的一些官方记录数据:
- TMemoryStream Wiki & TMemoryStream Doc with example
- TFileStream Wiki & TFileStream Doc(同一件事)
TMemoryStream
和TFileStream
有相同的目的吗?如果我们考虑一段时间的二进制数据输出流,那么我们可以 将
TMemoryStream
&TFileStream
替换为std::ostream
& 分别std::ofstream
?(我有点困惑)何时分别使用编译器特定的
TMemoryStream
和TFileStream
而不是std::ostream
和std::ofstream
?- 如果我们进行上述事情,我们可以获得什么好处?
TMemoryStream 和 TFileStream 有相同的目的吗?
它们具有相似的界面,但用途不同。TMemoryStream
从内存块读取/写入数据。TFileStream
改为从文件读取/写入数据。
如果我们考虑二进制数据输出流一段时间,那么我们可以分别用
std::ostream
和std::ofstream
替换TMemoryStream
和TFileStream
吗?
TFileStream
写入文件。std::ofstream
写入文件。 所以,你可以用TFileStream
替换std::ofstream
,是的。
TMemoryStream
有点棘手。TMemoryStream
写入根据需要动态(重新)分配的内存块。 没有用于写入动态内存块的标准C++流。 除非您考虑std::ostringstream
,否则它用于输出字符串,而不是二进制数据。 或者std::vector<char>
,它是动态的,但没有流接口。
但是,std::ostream
几乎可以使用您想要的任何std::streambuf
,并且有很多第三方自定义std::streambuf
实现可用于从(动态)内存读取/写入。例如,这个写入std::array<char, N>
,但您可以调整它以写入std::vector<char>
。或者找到适合您需求的其他实现。或者写你自己的。
何时分别使用编译器特定的
TMemoryStream
和TFileStream
而不是std::ostream
和std::ofstream
?
当您需要直接与Borland/Embarcadero的RTL/VCL/FMX框架接口时,请使用TMemoryStream
/TFileStream
。 否则,应使用标准C++类。
流是 IO 库C++的一部分。特别是,文件流由std::fstream
(http://en.cppreference.com/w/cpp/io/basic_fstream) 支持,内存中流由std::stringstream
(http://en.cppreference.com/w/cpp/io/basic_stringstream) 表示
- 使用CMake检测支持的C++标准
- 如何理解C++标准N3337中的expr.const.cast子句8
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 编译标准库类型
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 编译器如何在使用SFINAE的函数和标准函数之间确定两者是否可行
- 铸造标准::有没有回到原来的类型
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 标准库类型的赋值运算符的引用限定符
- 标准是否严格定义了该程序应该如何编译?
- 如何从Windows应用程序输出到标准?
- 安全到标准:移动会员?
- 如何正确将字符串转换为标准::时间::system_clock::time_point?
- 这是否符合C++标准:双响双响,例如!!(-0.0).
- 标准::变体的赋值运算符
- 捕获标准输出以压缩并使用 CTRL-C 中断会给出损坏的 zip 文件
- 如何在 Mac 上使用 c++17 并行标准库算法?
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- 并行标准::复制复杂性