シリアライズ第8回〜バージョンアップに耐える part.2〜


目次に戻る


先日紹介したバージョン番号を頭に付加する方法は読み込みルーチンが鬼のようにでかくなるので大規模なアプリケーションでは使用をお薦めできません。そこで、前回よりは読み込み部分がマシになる方法を紹介します。
 
それはフラグを利用する方法です。これはシリアライズの第6回で紹介した方法です。これを用いる事で読み込み部分はかなりすっきりとまとめる事ができます。
保存部分の概略
/* ファイルを開く */
fp = fopen( FILENAME , "wb" );

/* 以下の処理をデータ分だけ行う */
{
    /* 識別子を書き込む */
    fwrite( &data.ID , sizeof(data.ID) , 1 , fp );
 
    /*
     * データ本体を書き込む
     */
}
 
/* 終端識別子を書き込む */
fwrite( &endid , sizeof(endid) , 1 , fp );
 
/* ファイルを閉じる */
fclose( fp );

 
読み込み部の概略
/* ファイルを開く */
fp = fopen( FILENAME , "rb" );
 
/* 終端まで繰り返す */
do {
    /* 識別子を読み込む */
    fread( &id , sizeof(id) , 1 , fp );
 
    /* 識別子の内容によって読み込みルーチンを決定する */
    switch( id ){
        case DATA1:
            /*
             * DATA1の読み込みルーチン
             */
            break;
               :
               :
               :
    }
} while( id != endid );
 
/* ファイルを閉じる */
fclose( fp );
ただし、これにも問題があります。
取り扱うデータが多くなると読み込み部分のswitch〜case文がやたらとでかくなるのです。次回この部分の処理をもっとシンプルにする方法の一つを紹介します。


目次に戻る