「拡張ストレージ」とは、アプリケーションごとに独立で使用できる単一のファイルです。他の Java アプリケ−ションから参照・操作されることはありません。
拡張ストレージを作成するには、JAD ファイルのキーワードとして
MIDlet-X-Storage-Size: サイズ
の書式で拡張ストレージのサイズをバイト単位で指定してください。指定したサイズ分を 0x00(16進数)で初期化されたファイルが作成されます。指定可能な最大サイズは 204,800 バイトです。拡張ストレージを読み込むには、Connector クラスのスタティックメソッド open() に "storage:" スキームの url を指定して得られた StreamConnection オブジェクトに対して openInputStream() メソッドを呼び出します。 openInputStream() は成功すると、CLDC の InputStream オブジェクトを返します。取得された InputStream オブジェクトのメソッドで拡張ストレージ内のデータを読み込みます。 以下に例を示します。
byte[] buf = new byte[100];
StreemConnection conn = Connector.open("storage:", Connector.READ);
InputStream in = conn.openInputStream();
in.read(buf);
in.close();
conn.close();
データの読み込みが終わったら InputStream の close() と StreemConnection の close() を呼び出してください。また、StreamConnection オブジェクトを生成せずに直接 Connector クラスの openInputStream() メソッドに "storage:" スキームの url を指定して InputStreem オブジェクトを生成することもできます。以下に例を示します。
byte[] buf = new byte[100];
InputStream in = Connector.openInputStream("storage:");
in.read(buf);
in.close();
データの読み込みが終わったら InputStream の close() を呼び出してください。実際の拡張ストレージの読み込みは openInputStream() メソッド内で行われます。そのため、実際に拡張ストレージのデータの読み込み中に音声着信などで中断すると、openInputStream() で例外 IOException が発生します。
拡張ストレージに書き込むには、Connector クラスのスタティックメソッド open() に "storage:" スキームの url を指定して得られた StreamConnection オブジェクトに対して openOutputStream() メソッドを呼び出します。 openOutputStream() は成功すると、MIDPの OutputStream オブジェクトを返します。取得された OutputStream オブジェクトのメソッドで拡張ストレージ内のデータを書き込みます。 以下に例を示します。
byte[] buf = new byte[100];
StreemConnection conn = Connector.open("storage:", Connector.WRITE);
OutputStream out = conn.openOutputStream();
out.write(buf);
out.close();
conn.close();
データの書き込みが終わったら OutputStream の close() と StreemConnection の close() を呼び出してください。また、StreamConnection オブジェクトを生成せずに直接 Connector クラスのメソッド openOutputStream() メソッドに "storage:" スキームの url を指定して OutputStreem オブジェクトを生成することもできます。以下に例を示します。
byte[] buf = new byte[100];
OutputStream out = Connector.openOutputStream("storage:");
out.write(buf);
out.close();
データの書き込みが終わったら OutputStream の close() を呼び出してください。write() メソッドで書き込まれたファイルの内容はメモリ上に蓄積され、実際の拡張ストレージへの書き込みは OutputStream の close() メソッド内で一括で行われます。そのため、実際に拡張ストレージのデータの書き込み中に音声着信などで中断すると、write() メソッドではなく close() メソッドで例外 IOException が発生します。 なお、実際の書き込み時に音声着信などで中断してエラーが発生した場合、VM 内で何度か書き込み処理を繰り返すため、close() メソッドで例外 IOException が発生することは非常に稀です。
拡張ストレージの実際の書き込み時に音声着信などで中断してエラーが発生した場合、VM 内で何度か書き込み処理を繰り返しますが、稀に、それでも書き込めない場合があります。その場合はエラーになり、拡張ストレージは書き込む前の状態に戻るか、削除されます。 書き込む前の状態に戻るか削除されるかは、移動機に依存します。
書き込みの失敗でファイルが削除された場合、拡張ストレージの内容は破棄され、 再度、拡張ストレージにアクセスする際に 0x00(16進数)で初期化されたファイルが再作成されますが、稀にデータフォルダの容量が足りないなどの理由でファイルの再作成が失敗しエラーメッセージが表示されることがあります。