如何动态输出替换了一些字节的文件内容?

时间:2017-03-17 03:41:28

标签: linux gcc dynamic zip fuse

  

我使用了一个名为' concatfs'

的保险丝插件      

它可以虚拟合并一些具有特定文件名的文件,例如xxx-concat-.mkv,   此文件的内容为 TEXT

1.mkv
2.mkv
3.mkv
  

系统读取xxx-concat-.mkv输出合并后的文件1.mkv 2.mkv ...。但实际上文件没有合并,它是一个虚拟输出。

所以,我的问题是:

  • 静态文件,1.zip> 300 MB。
  • 它有很多副本(发布给很多人),这些副本中的差异只有4个字节offset: 0xa 0xb 0xc 0xd。 4个字节是人们的身份
  • 所以我想制作一个名为' 1-replaced-123.zip'像concatfs,内容大多像:(所有二进制)
  

1.zip

     

0xa 4被替换 - 4bytes-binary-content

     

0x1111 10被替换 - 10bytes-binary-content

  • 系统会读取1-replaced-123.zipfuse会输出已替换的内容。
  • 可以节省这么多磁盘空间。
  • 我知道PHP / JSP可以读取和回显替换,但php将使用高CPU /内存来回显大文件流。
你有什么建议吗?

  

非常感谢,对不起我的英语。

1 个答案:

答案 0 :(得分:0)

merged-fuse 用于虚拟合并/替换文件(C ++ 11)

https://github.com/fly-studio/merged-fuse

示例

的1.txt

12345678

2.txt

abcdefghi

制作名为1-merged-.txt的文件,

-merged-是文件名中的特殊字词

内容是JSON格式

[
    {
        "path": "1.txt"
    },
    {
        "path": "2.txt",
        "replaces": [
             {
                 "offset": 2,
                 "length": 2,
                 "content": "MjE="
             }
        ]
    }
]

cat 1-merged-.txt时,输出:

12345678ab12efghi

您可以看到文件已合并(虚拟),内容已被替换:

cd已替换为12