> まず提示いただいたソースのようにシリアライズしたデータ列をそのままMemroyReaderに渡してデシリアライズした場合には、ファイルのIOを経由せずにメモリ上での操作で完結されていることとなりファイルの読み込みエラーは否定されます。
提示したソースは「セーブ処理」と「ロード処理」のイメージをお伝えするために記載したものとなります。
「セーブ処理」と「ロード処理」が連続しているわけではございません。わかり難くてすみません。
実際には「セーブ処理」によりストレージにファイルを保存します。
その後ゲームを終了し、ゲームを再起動した後にストレージのファイルをロードしたところでエラーになりました。
> 対象クラスは複雑なクラスを含まずに基本的な型がほとんどであることを前提とすれば、その中には可変長のデータ構造を持ち得るEnumや文字列、配列がありますがそれらはデシリアライズ中に要素数に異常な値が検出された場合にエラーをセットすることがありえることを除けば入力データサイズの不足によるエラー程度しか可能性はないように見えます。
「セーブ処理ではar.IsError()はfalseとなり、ロード処理でar.IsError()がtrueになるケース」につきましては次の2つの可能性があるという認識でよろしいでしょうか?
1.デシリアライズ中に可変長のデータ構造を持ち得るEnumや文字列、配列の要素数に異常な値が検出された場合
2.入力データサイズの不足
また「入力データサイズの不足」につきまして詳細を教えていただけますでしょうか。
例えば「入力データサイズの不足」を検出する方法や回避する方法などを知りたいと考えております。
> > デシリアライズによりエラー(ar.IsError())が発生した後はクラッシュさせているため、データが正常かどうかは確認できておりません。
> 承知しました。問題発生時にセーブファイルの保存に成功されているのであれば再起動後のロードで正しく読めたかどうか確認できたかと思いますがこちらはいかがでしたか?
再起動後のロード処理でエラー(ar.IsError())になっておりました。