首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有将文件分割成较小文件的设计模式?

问是否有将文件分割成较小文件的设计模式?
EN

Software Engineering用户
提问于 2014-09-01 14:12:57
回答 1查看 1.8K关注 0票数 3

我正在开发一个项目,我必须加载非常大的文件(高达50 MB)。目前,我正在将这些文件完全加载到(连续)内存中。这样做的优点是我可以很容易地在某些位置更改字节,因为我不知道所有字节的结构。

然而,我的意图也是改变结构,例如删除/添加“块”。现在,我的想法是从其中删除“已知”部分,将它们存储在类中,其中只包含这些部分的数据块,并为这些块创建一个引用列表。

例如:

原始档案:

  • 标题
  • ChunkA 1
  • ChunkA 2
  • 中级
  • ChunkB 1
  • 页脚

其结果将是:

ChunkA 1和ChunkA 2实例。ChunkB 1实例

“‘File”实例和带有基偏移量的引用+对所有块的引用。

最后,我必须‘重新创建’或写入原始文件(与更改)回来。

一般来说,这是一个好主意,还是有一些设计模式帮助了我?

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2014-09-02 03:41:35

首先,我同意上述一些评论者的看法,即您所需要的可能只是合理的数据结构。每个数据结构都可以完成一个简单的契约,既可以从某个字节流中读取数据,也可以将其写入一个字节流。对于50 of大小的文件,这可能是您所需要的。在回答的其余部分中考虑到这一点。

然而,我觉得你们可能会在这里试图探究一些更深层次的概念。

首先想到的是缓冲区的效率。我认为这里的一个常见技巧是预先分配已知大小的缓冲区“部件”,并使用缓冲区“部件”的列表。在C#中,IList>的使用可以看作是预先分配数组的有效包装器。见这里。请注意,这些缓冲区大小通常与磁盘扇区大小和内存页大小有关联。预先进行有效的结构定义可以在以后进行有趣的优化。例如,焦油存档格式出于这种原因使用了一个512个字节的头记录。如果您要从TAR中复制文件,您的扇区边界就不会被弄乱,这可能非常好。

其次,我想知道对绳背后的字符串处理设计的研究是否会带来一些启示。它遵循了类似的思路。这将是有用的,取决于您的编辑策略。

票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/255045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档