質問: Eclipseでjava8を使って開発しています。 文面だけの説明失礼します。 オーディオファイルをシリアライズして、ほかのクラスのデータとして一緒に出力、といったことはできないでしょうか。 ファイルパスを保存するのが一般的だと思うのですが、 音声ファイルがないとどうにもならないデータなので、 ほかの人にプロジェクトを共有するときに、 ファイル一個渡せばいい というふうにしたいので、どうにかシリアライズしたいです... いくつか音声ライブラリがあると思うのですが、どんなものでも構いません。 想定する音声形式はMP3とWAVEは最低でも...といったところです。 試してみた対策 ------- * ライブラリのオーディオ本体のクラスを継承してシリアライズ → オーディオ本体がもつデータにシリアライズされていないファイルが多すぎて無理 * Java標準APIの`AudioInputStream`を何も考えず`XMLEncoder`で → 出来る訳もなく * 音声データのFileをStringにして → StringからFileにもどす方法が分からず...(しかもこの方法、どこのプログラマーが許すもんかって話ですよね、文字コードとかメタタグとかの問題で) 目標 -- メタタグは保存できなくてもいいので、音声データを、オーディオデータとして、もしくはひとつのデータとしてシリアライズして、データクラスにシリアライズ可能な状態で保存。 といった具合かなぁ...と。 ただの知識不足かもしれませんが、ご助力願います...
回答: `String`にしてシリアライズするというのは、できなくもありません。 ファイルをバイト列に変換して、それを16進数の文字列に変換します。一度にファイル全部だとメモリー効率が悪いので、何バイトかごとに区切って(バッファリングして)変換します。 戻すときはその逆です。 ただ、非常に効率が悪いと思います。 Eclipseであれば、エクスポート機能を使ったり、もっと単純にZIPとかに固めてしまえばよい気もするのですが、それがダメな理由も教えていただけると他の案も出せるかも知れません。