我找到了遗留源代码,此处摘录 -
TMemoryStream *DFile = new TMemoryStream;
TFileStream*BFile = new TFileStream;
以下是上述课程的一些官方记录数据:
TMemoryStream
& TFileStream
有同样的目的吗?
如果我们考虑二进制数据输出流一段时间,那么我们可以
替换TMemoryStream
& TFileStream
与std::ostream
&
分别是std::ofstream
?
(我有点困惑)何时使用特定编译器TMemoryStream
& TFileStream
超过std::ostream
&分别std::ofstream
?
答案 0 :(得分:4)
是TMemoryStream& TFileStream有同样的目的吗?
他们有类似的界面,但他们有不同的目的。 TMemoryStream
从/向内存块读取/写入数据。 TFileStream
代替从/向文件读取/写入数据。
如果我们考虑二进制数据输出流一段时间,那么我们可以替换
TMemoryStream
&TFileStream
与std::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::fstream
(http://en.cppreference.com/w/cpp/io/basic_fstream)支持文件流,内存流由std::stringstream
(http://en.cppreference.com/w/cpp/io/basic_stringstream)