c++ - embarcadero/borland TMemoryStream 和 TFileStream 的标准 C++ 等价物是什么?

标签 c++ c++builder ofstream ostream

我找到了遗留源代码和这里的摘录 -

TMemoryStream *DFile = new TMemoryStream;
TFileStream*BFile = new TFileStream;

以下是上述类的一些官方文档数据:


  • TMemoryStreamTFileStream 是否具有相同的用途?

  • 如果我们暂时考虑二进制数据输出流,那么我们可以吗? 将 TMemoryStream & TFileStream 替换为 std::ostream & std::ofstream分别是?

  • (我有点困惑)什么时候使用编译器特定的 TMemoryStream & TFileStream 而不是 std::ostream & std::ofstream 分别是?

    • 如果我们执行以上操作,我们可以获得哪些优势?

最佳答案

Is TMemoryStream & TFileStream has same purpose ?

它们具有相似的界面,但用途不同。 TMemoryStream从/向内存块读取/写入数据。 TFileStream改为从文件读取数据/向文件写入数据。

If we consider binary data output streaming for awhile then can we replace TMemoryStream & TFileStream with std::ostream & std::ofstream respectively?

TFileStream写入文件。 std::ofstream写入文件。所以,你可以替换 TFileStreamstd::ofstream ,是的。

TMemoryStream有点棘手。 TMemoryStream写入根据需要动态(重新)分配的内存块。没有用于写入动态内存块的标准 C++ 流。除非你考虑 std::ostringstream ,这意味着输出字符串,而不是二进制数据。或者 std::vector<char> ,它是动态的,但没有流接口(interface)。

然而,std::ostream几乎可以与任何 std::streambuf 一起使用你想要的,并且有很多第 3 方自定义 std::streambuf可用于从(动态)内存读取/写入(动态)内存的实现。例如,this one写入 std::array<char, N> , 但您可以修改它以写入 std::vector<char>反而。或者找到适合您需要的另一个实现。或者自己编写。

When to use compiler specific TMemoryStream & TFileStream over std::ostream & std::ofstream respectively?

使用 TMemoryStream/TFileStream当您需要直接与 Borland/Embarcadero 的 RTL/VCL/FMX 框架交互时。否则您应该使用标准 C++ 类。

关于c++ - embarcadero/borland TMemoryStream 和 TFileStream 的标准 C++ 等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49134621/

相关文章:

c++ - 将奇异对齐的对象置于协程状态是否是定义的行为?

c++ - 屏幕坐标到世界坐标

c++ - 检查计算是否会导致溢出c++

delphi - 为什么新建组件向导不显示任何祖先类?

c++ - 如何在 C++ 中对文件系统进行非并发打印?

c++ 填充现有 C 数组的边

c++ - 混淆 "Access Violation "

c++ - openGL - 调用 glMatrixMode(...) 时出现访问冲突

c++ - 如何在一次操作中从/向文件读取/写入固定数量的整数(尽可能快,文件可以假定为二进制)?

c++ - 写入和读取随机数状态到文件