我已经阅读了文档中的流,我已经了解它们是如何工作的,但我还没有理解何时应该使用它们。
例如,让我们认为我有一个程序AAA.exe,它必须保存一些配置;在这种情况下,我将使用ini
文件。但我也可以使用TFileStream
和TBinaryWriter
/ TBinaryReader
来创建一个名为(例如)config.aaa
的文件。
正如您在第二个示例中所看到的,config.aaa
有一个我发明的自定义扩展,仅我知道如何阅读它(因为写作顺序和阅读顺序必须是一样的。)
创建config.ini
和config.aaa
有何不同?第二种选择是否更好?我知道这取决于案例,但我想知道这是不是一个好选择。
我想我可以使用自定义扩展程序创建一个自定义文件,以存储我的程序只能访问的特定数据。
答案 0 :(得分:3)
这是两个不同的问题。
什么时候应该使用流?
Streams是一种以一致方式访问数据的抽象,无论实际存储的具体细节如何。例如,考虑TMemoryStream
,TFileStream
和TResourceStream
。所有这些都为您提供了读取和写入数据的相同界面,但数据最终存储在非常不同的位置 - 内存,文件系统,PE文件的资源。这里的重要部分是尽管底层存储存在显着差异,但通过流访问数据的方式始终是相同的。实际上,您可以简单地将一个流替换为另一个流(例如,通过网络读取数据的流),并且您的应用程序仍然可以正常运行而无需进一步更改。
因此,为了回答您的问题,您应该在每次可能发生更改存储设备或修改其特征(例如添加压缩)时使用流。
但这完全独立于您在流中存储的实际数据。由您来解释数据,流只是为您提供了一种统一的访问方式,隐藏了您的设备细节。数据的含义完全不同。
对于您的文件,config.ini
和config.aaa
(或者,pink unicorn.mp3
)之间没有真正的区别。文件名和扩展名只是您为该文件提供的标签,以便于理解内容,但实际解释与名称无关。对于习惯使用Windows的人来说,这似乎很奇怪,因为在Windows上我们经常使用扩展来确定文件的内容(与Unix世界不同,扩展没有任何意义);但即使在Windows上,您也可以注意到扩展名并不是很重要 - 将您的照片从something.jpg
重命名为somethingelse.png
或将您的视频从movie1.avi
重命名为movie1.mp4
,您将会可能会注意到你的观众/播放器也可以显示/播放这些 - 只是因为它不关心扩展,而是扫描内容并决定如何根据该内容显示/播放文件。
如果您使用的是Windows,那么使用公共扩展名是有意义的,因为它可以让其他人(或您未来的自己)轻松猜出文件的内容,但这不是强制性的。