1

特定のコードは次のように機能します。

  1. ディスクからファイルを読み取り、メモリに NSData として保存します
  2. それを暗号化 (復号化) すると、メモリ内に同じサイズの NSData オブジェクトが追加されます。
  3. 暗号化 (復号化) されたデータをディスクに書き込む

現在、サイズが 10 または 100 mb のようなファイルの場合、これは問題なく動作し、1 秒あたりの処理バイト数の一貫した速度を維持します (したがって、100 mb ファイルの処理には 10 mb のファイルの 10 倍の時間がかかります)。1.5ギガまで上げると、システムはそのうち2つをメモリに保持する必要があるため、ディスクへのスワップが開始され、速度が劇的に低下します。

だから私はおそらく次のことが可能だと思った:

  1. ファイルを見て、それを 100 MB のチャンクに分割します (たとえば)
  2. チャンクを読む
  3. 暗号化(復号化)します
  4. 暗号化されたチャンクを出力ファイルに追加します
  5. プロセス全体が最大 200 MB の RAM を使用するように、元のチャンクを破棄します。

私の質問は:

  1. それは可能ですか?
  2. もしそうなら、それはそれを行うための最良の方法ですか?
  3. もしそうなら、どうやってそれを実装しますか?
4

1 に答える 1

1

あなたがやりたいことは完全に可能です。あなたの質問には少し長い回答が必要なので、次の Web ページを参照してください。

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Streams/Articles/ReadingInputStreams.html

このページの例はファイルを扱っていることに注意してください。バッファーを必要なサイズに設定し、一度に必要な数のバイトを読み取ることができます。暗号化ルーチンを呼び出すのに適した場所も表示されます。

-writeToFile:atomically:作成した NSMutableData インスタンスを使用して、またはを使用してディスクに書き出すことができます。-writeToURL:atomically:

ぜひお試しください。今後ともよろしくお願いいたします。

于 2012-04-04T15:00:23.173 に答える