delphi - 读取大型二进制文件

标签 delphi delphi-2010 c++builder binaryfiles binary-data

我正在开发一个项目,将一些信号(一维数组)记录到二进制文件中。我可以存储大量数据(通常是几千兆字节)。现在我想重新加载这些文件。

我有两个视觉组件。一个称为概述,另一个只是简单的 Y/T 图表。概述应该让用户了解完整文件(大文件)中的内容,而图表仅显示文件的一部分,通常是在概述中通过可调整大小的矩形/带选择的部分。

因为文件可能非常大,加载到内 stub 本不是最佳选择,因此主要思想是仅加载到内存(最多几 MB)重要数据/可见数据。因此加载和显示是根据用户需求完成的。如果用户放大图表,则需要使用文件中的更多数据点重新加载数据。

我的问题是如何绘制概述组件以最佳方式显示文件的全部内容(无需真正从文件加载所有示例)。假设我的文件大于 10GB,我想让用户了解文件中的内容,但我可以绘制最大值。概述组件有 16k 个样本?

是否有任何方法可以在记录期间存储任何附加数据(例如索引、较小的数据 block 、图像...)以供以后加载和绘制概述组件?目前我只存储样本,但添加额外的数据不会有问题。您有这方面的经验吗?您是如何做到的?

了解我在做什么:

enter image description here

最佳答案

您可以使用多级抽取 - 只需存储第 N、N^2 等样本(例如,第 10、100、1000、10000...)。当用户更改窗口大小时,选择适当的级别,该级别在该窗口中包含大约 1000 个样本,快速加载并显示这些样本(1000 点对于屏幕上的图表来说只是合理的数字)。

如果您的数据具有某些特征、特殊属性,则可以获得更大(升级)的数据集并应用 Douglas-Peucker折线简化算法来保留特征。

关于delphi - 读取大型二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23211773/

相关文章:

delphi - 编译时播放声音

windows - 如何在 Delphi 中隐藏 MDI 子窗体?

delphi - 如何有效地等待文件解锁?

delphi - 将 PDF 文档 (*.pdf) 转储到文本?

Delphi 2010 及早期编译器

xcode - Embarcadero RAD Studio/FireMonkey 可以与 XCode 5 配合使用吗?

c++builder - C++ Builder 流程​​图组件?

multithreading - 使用Delphi TThread

delphi - 使用TADOQuery查询TClientDataSet

DELPHI - 如何使用 opendialog1 选择文件夹?