はじめに
こんにちは ◤●ㅅ●◥ノ
今回は代表的なデータフォーマットとその操作方法について学びました!
第7章 さまざまなファイル形式
1.データフォーマット
複数のデータについてどのような形式や順序で保存するかを定めたルール
→ データフォーマット
複数のデータをファイルに保存したり、ネットワークを経由して遠隔地に伝送する場合に役立つ
ファイル内のデータ構造→ファイルフォーマット
メッセージのデータ構造→メッセージフォーマットor電文フォーマット
2.CSV形式
複数のデータをカンマで区切って順に格納するデータフォーマット形式
→ CSV と呼ばれている
書き込み...各データの合間にカンマ記号を出力する
読み込み...基本的に1文字ずつ読み進めながらカンマかどうかを判断する
3.プロパティファイル形式
CSV形式のカンマ区切りやスペース区切りでは力不足な場合
→Javaでは プロパティファイル形式 を用いる
形式には次のようなルールに従って、データをキーと値のペアで格納する
プロパティファイル形式の主なルール
・データは文字情報として保存する
・各行には「キー」と「値」をペアとして、それらを「ペアデリミタ」で区切って記述をする
・ペアデリミタはイコール、コロン、空白のいずれかの文字
・シャープまたは感嘆符で始まる行はコメントとして無視される
・ファイルの拡張子には「.properties」が用いられる
プロパティファイル形式の読み書き
→java.utilパッケージにはPropertiesクラスが用意されている
プロパティファイル形式の書き込み
→PropertiesインスタンスにsetProperty()でキーと値のペアをセットした上でstore()を呼び出す
実際にはより高度なjava.utilのResourceBundleクラスが多い
ResourceBundleはファイルに書き込む命令を備えていない他、以下の2点の特徴を持つ
1.プロファイルを「クラスパス上」から探し出せる
クラスパスからプロパティファイルを探す
ResourceBundle rb = ResourceBundle.getBundle(文字列);
2.場合に応じて異なるプロパティファイルから値を読み取れる
4.XML形式
親子関係の構造(ネスト)である場合にXML形式の利用をする
XMLはタグと呼ばれる不等号記号で囲まれたラベルの中にデータを記述するフォーマット
→タグの中にタグをネストさせ親子関係の構造にすることも可能
JavaではXML形式のファイルを操作するためのAPIとしてJAXPが提供されている
javax.xml.parsersパッケージやorg.w3c.domパッケージなどから構成される比較的複雑なAPI
5.JSON形式
CSV以上XML以下のニーズに合うファイルフォーマットとしてJSONが存在している
JSON形式の主なルール
・必ずUTF-8という文字コードで記述する
・原則、どこでも開業できる(リテラルの途中を除く)
・文字列リテラルは二重引用符で囲む
・整数や少数はそのままリテラルとして表記できる
・null,true,falseはそのままリテラルとして表記できる
・[]内にカンマで区切られた値で、リスト構造を表す
・{}内にカンマで区切られたキー:値の記述で、マップ構造を表す
6.オブジェクトの直列化
Javaには1つの命令を呼び出すだけで、あるインスタンスの内容を丸ごとそのままバイト列に変換したり
逆にバイト列をインスタンスに戻す
→直列化という仕組みが備わっている
直列化は扱いに注意が必要、矛盾した状態で復元されてしまうことがある
→未然に防ぐためにシリアルバージョンUIDというクラスフィールドとして宣言しておく
まとめ
複数のデータをカンマで区切って順に格納するデータフォーマット形式をCSV形式
さまざまな種類のCSVに対応するため、ライブラリを用いて読み書きすることが多い
タグを用いた記述でネストしたデータ構造を表現できるXML形式
JAXPというAPIを利用して読み書きできる
XMLより手軽でネストしたデータ構造を表現できるJSON形式
JSON-Pや各種のライブラリを用いて読み書きできる
直列化の仕組みを使うとインスタンスを丸ごとバイト列と相互変換できる