■本文始まり■ ストリームで処理する場合の定番としては、 ・ブロックサイズ(1回の読み書きのサイズ)を決める ・ブロックサイズ分のメモリを確保(文字列変数に確保する) ・ストリームを開く ・ストリームからブロックサイズ分読む ・必要ならば、読み込んだ内容を加工する ・読み込めて処理したサイズ分、ストリームに書き込む ・以上、ストリームから読めなくなるまで繰り返す ・ストリームを閉じる です。 加工内容にもよりますが、1バイトづつ処理するか、4バイト単位で処理するか、になります。 (バイト単位で前のデータに依存するなら、バイト単位、依存しないならば、4バイトづつ とか) また、ブロックサイズで読み書きする場合と、4バイト単位で処理する場合のどちらの場合も ですが、端数のデータをどうするかを考慮してプログラミングする必要があります。 が、それに見合うだけ、処理性能は上がるはずです(なので、定番となる) ■本文終わり■ 1ブロック1024バイトにしてやってみました。 1回のバイナリ取得は「INT」で4バイト。 残りがブロックサイズ未満になったら1バイトずつ処理(プログラム簡略のため) 早くなった気がします。 ~上略~  ブロックサイズは1024  1でループ    pos=h1のファイルストリーム位置取得    もしsize<=posならば、抜ける    もしsize-ブロックサイズ>posならば      bin=h1でブロックサイズをファイルストリーム読む      ブロックサイズ/4 回        r=1+(回数-1)*4 //取得・書き込み先 1,5,9,13…        val=binのrを「INT」でバイナリ取得        val=XOR(val,$FFFFFFFF)        valをbinのrに「INT」でバイナリ設定      h2でbinをファイルストリーム書く    違えば      bin=h1で1をファイルストリーム読む      1回        val=binの1を「BYTE」でバイナリ取得        val=XOR(val,$FF)        valをbinの1に「BYTE」でバイナリ設定      h2でbinをファイルストリーム書く ~以下略~ INTって4バイト? 本当? 決め打ちでよい? 一度にもっとたくさん取れない? XORも$FFFFFFFFFFFFFFFFとやればいいんじゃないの? などの疑問はあるのでもうちょっとコメント待ちしてみます。