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

时间:2018-03-06 15:38:15

标签: c++ c++builder ofstream ostream

我找到了遗留源代码,此处摘录 -

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

以下是上述课程的一些官方记录数据:

  • TMemoryStream& TFileStream有同样的目的吗?

  • 如果我们考虑二进制数据输出流一段时间,那么我们可以 替换TMemoryStream& TFileStreamstd::ostream& 分别是std::ofstream

  • (我有点困惑)何时使用特定编译器TMemoryStream& TFileStream超过std::ostream&分别std::ofstream

    • 如果我们执行上述事情,我们可以获得哪些优势?

2 个答案:

答案 0 :(得分:4)

  

是TMemoryStream& TFileStream有同样的目的吗?

他们有类似的界面,但他们有不同的目的。 TMemoryStream从/向内存块读取/写入数据。 TFileStream代替从/向文件读取/写入数据。

  

如果我们考虑二进制数据输出流一段时间,那么我们可以替换TMemoryStream& TFileStreamstd::ostream&分别std::ofstream

TFileStream写入文件。 std::ofstream写入文件。因此,您可以将TFileStream替换为std::ofstream,是。

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

但是,std::ostream可以与您想要的任何std::streambuf一起使用,并且有很多第三方自定义std::streambuf实现可用于从/向读/写(动态)记忆。例如,this one会写入std::array<char, N>,但您可以将其调整为写入std::vector<char>。或者找到另一种适合您需求的实现。或者自己写。

  

何时使用特定编译器TMemoryStream&amp; TFileStream超过std::ostream&amp;分别std::ofstream

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

答案 1 :(得分:1)

Streams是C ++ IO库的一部分。特别是,std::fstreamhttp://en.cppreference.com/w/cpp/io/basic_fstream)支持文件流,内存流由std::stringstreamhttp://en.cppreference.com/w/cpp/io/basic_stringstream

表示