【问题标题】:Modifying Data (bytes) in a File iOS修改文件 iOS 中的数据(字节)
【发布时间】:2012-02-06 17:56:56
【问题描述】:

我有一个大约 700MB 的巨大加密文件 (mp4)。文件头被加密了大约(1MB+虚拟字节)。该文件解密成功。

现在我想删除文件(同一文件)中的(1MB+虚拟)加密字节并用解密字节替换它们。

我怎样才能达到同样的效果? 在这方面的任何帮助将不胜感激。提前致谢。

NSFileHandle *encVideoFile=[NSFileHandle  fileHandleForUpdatingAtPath:**encVideoFilePath**];  

//the data is read from file by using readDataOfLength method & decrypted (decryptedData). 

[encVideoFile seekToFileOffset:0];
[encVideoFile writeData:decryptedData];

[encVideoFile 关闭文件];

我在这里面临的问题是我已经(1MB+ DummyBytes)加密并且当我解密 1MB+ DummyBytes 时,我得到大约 0.9MB(解密字节)。

所以我的问题仍然存在(0.9MB+ 一些不需要的字节 + 未加密的字节)。

关于如何克服的建议会有所帮助。

【问题讨论】:

    标签: iphone objective-c ios nsdata nsfilehandle


    【解决方案1】:

    我假设您的目标是避免将整个文件读入内存,对吗?有两种解决方案,具体取决于您要如何攻击它:

    首先是memory mapped file。请记住,标题的大小不能更改。

    或者,您可以按照您的建议使用NSFileHandle。打开它进行“更新”,寻找文件的开头,并写入新字节。然后关闭。同样,标题的大小不能改变。


    您的编辑表明您正在尝试“压缩”文件以删除“不需要的字节”。如果不重写文件,这是不可能的。 iPhone 文件系统除了文件末尾之外没有从任何地方删除数据的机制。

    最好的解决方案通常是在首先写入头文件之前对其进行解密。或者修改您的阅读算法以跳过不需要的字节。

    【讨论】:

    • 谢谢。我使用过 NSFileHandler 但在将解密的数据(字节)写入文件后遇到了问题(我的问题中更新了代码)。请帮我解决同样的问题。
    【解决方案2】:

    您是否尝试过使用以下功能?它可以帮助您摆脱标头字节。然后你可以将解密后的字节放在一个变量中并附加后者的值。

    - (NSData *)subdataWithRange:(NSRange)range;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-28
      • 1970-01-01
      • 2023-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-13
      相关资源
      最近更新 更多