Javaにおける入出力とXML 2011年5月15日 海谷 治彦.

Slides:



Advertisements
Similar presentations
XML ゼミ 独習 XML ~ 第 6 章 XHTML~ 6.1 XHTML の概要 6.2 XHTML の構造 谷津 哲平.
Advertisements

プログラミング第5回 1 while ループ 文字列の操作
第11回Javaゼミ 11.1 ファイルとディレクト リ 11.2 文字ストリーム 11.3 バッファ付き文字スト リーム 2006/06/28 神津 健太.
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
Java I 第2回 (4/18)
IO - 入出力 小西 亨.
オブジェクト指向プログラミング(4) 静的分析(2)
知識情報演習Ⅲ(後半第1回) 辻 慶太(水)
背景 我々の研究室で開発しているJavaプログラム解析フレ ームワークでは,解析情報はメモリ上に保持される 問題点
~手続き指向からオブジェクト指向へ(Ⅰ)~
アルゴリズムとデータ構造1 2007年6月12日
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
Javaのインタフェース についての補足 2006年5月17日 海谷 治彦.
ファイルシステムとコマンド.
xxxxxx . yyy xxxxxx Linuxにおける情報管理 一般的なファイル UNIX における情報管理の単位 ファイルの種類を表す
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
UMLの概要と オブジェクト指向の 基本概念
第7章 データベース管理システム 7.1 データベース管理システムの概要 7.2 データベースの格納方式 7.3 問合せ処理.
JavaBeans とJSP データベース論 第5回.
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
情報処理技法 (Javaプログラミング)2 第2回 前期の復習(2)
Flyingware : バイトコード変換による 安全なエージェントの実行
プログラミング演習3 第2回 GUIの復習.
第13回 ハッシュテーブルを使ったプログラム ~高速に検索するには?~.
11.6 ランダムアクセスファイル 11.7 StreamTokenizerクラス
ソフトウェア工学 知能情報学部 新田直也.
プログラミング言語入門 手続き型言語としてのJava
サブゼミ第9回 実装編③ 永続化とjava.ioパッケージ.
大岩 元 慶応大学環境情報学部 数式の表現と日本語 大岩 元 慶応大学環境情報学部
例外処理 と ファイル入出力 情報システム学科 平塚 聖敏.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
安全なモバイルエージェント システム Flyingware のための 仮想ディスクの実現
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
リファレンスの復習と例外処理 2005年6月14日 海谷 治彦.
リファレンス,配列,例外処理 その他演習に役立つこと
EclipseでWekaのAPIを呼び出す
プログラミング 4 記憶の割り付け.
Collection, Generics, Iterator
プログラミング演習3 第2回 GUIの復習.
クラスファイルの構造解析(2) 2003年6月23日 海谷 治彦.
UML関係のTIPS 2008年5月26日 2010年5月16日改訂 海谷 治彦.
Java/Swingについて+ (4) 2005年10月26日 海谷 治彦.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
第4回 ファイル入出力方法.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
コード片に共通した特性を自動抽出する ソースコード閲覧ツールの試作
先週の復習: CPU が働く仕組み コンピュータの構造 pp 制御装置+演算装置+レジスタ 制御装置がなければ電卓と同様
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
プログラミング演習I 2003年7月2日(第11回) 木村巌.
数式の表現と日本語 データ構造とプログラミング(6)
プログラムが実行されるまで 2002年4月14日 海谷 治彦.
システムプログラミング 第6回 システムコールのエラーメッセージ ファイルシステム 情報工学科 篠埜 功.
演習1に関する講評 ~ 業務仕様を書く難しさ ~
Javaによる Webアプリケーション入門 第4回
Annotation EJB 3.0 コース 第3回 2006年8月4日.
サブゼミ第7回 実装編① オブジェクト型とキャスト.
アルゴリズムとデータ構造1 2009年6月15日
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
アルゴリズムとデータ構造 2010年6月17日
ソフトウェア工学 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
情報処理Ⅱ 2005年11月25日(金).
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
Presentation transcript:

Javaにおける入出力とXML 2011年5月15日 海谷 治彦

目次 入出力の抽象化 ファイル入出力の概要 XMLEncoder/Decoder 永続化とは?

データと情報 データ 情報 人間による意味付け の無いもの. 人間による意味付け の有るもの. CDの上の0/1列等. 音楽,絵画,図書等. 磁気や突起等の物理情報 人間による意味付け の有るもの. 音楽,絵画,図書等.

情報処理と入出力 計算機では直接に情報は入出力できない. 意味付けの無いデータとして扱うしかない. 情報をデータに変換する作業のかなりの部分は人間が明示的にプログラミングしないといけない・・・

例 音声 画像 図書,文書 Linier PCM や MP3等,音声情報をデータとして記述する規格が存在する. 専門じゃないので詳細はわかりません. 画像 同様にjpegやgif等,画像情報をデータとして記述する規格. 図書,文書 通常は文字列として扱う. MSワードやPDF等も文書情報をデータとして記述する規格の例.

OSのファイルシステム (ご存知の通り,ほとんどの)OSは木構造のファイルシステムを持つ. 木の葉: ファイル 木の中間ノード: フォルダもしくはディレクトリ J2SEは一般的なOSのファイルシステムを扱うAPIを備えている.

UNIX系ファイルシステムの概要 OSのスライドから抜粋 / dev home bin usr ・・・・ ・・・・ fd0 hda ls cp 文献5 p.15

mountの概念図 OSのスライドから抜粋 bをhomeに マウントする / / etc usr etc usr home home b bin local bin local b kaiya miyao takei kaiya miyao takei 文献1 p.45 改

mountの実際 OSのスライドから抜粋 / (hda1) /mnt /usr /home (fd0) (hdb1) /cdtest (hdc)

外部データと内部データと情報 情報 外部データ 内部データ 入出力 int x, y, z; class Foo extends Bar{ String sakana=“x”; };

内部データ(変数)の役割 コンピュータによる情報処理では直接に外部データを操作できない(わけじゃないけど,効率が悪い). 比較的早いメモリ上のデータ(変数)を操作して処理をするのが普通. 結局,入出力とは内部データと外部データを相互に変換する作業. この変換作業の手間を減らせればうれしい.

文字列: データ? 情報? JavaのStringは明らかにデータである. しかし,その字面を人間が解釈して(ある意味勝手に,しかし多くの人間間で共通理解を与えつつ)意味付けをすることができる. その意味で,文字列データは情報に近いものと考えられる. その意味でデータを(情報に近い形で保存するには)文字列が都合よい.

文字ストリーム ファイル名: String : FileWriter 読み出し側 : FileReader 書き出し側 テキストファイルの読み書きに良く使われるクラス呼び出し連鎖. : FileWriter 読み出し側 : FileReader : BufferedWriter write(...) close() 書き出し側 : BufferedReader readLine() close() : PrintWriter println(...) close()

Stdioからの読み書き System.in: InputStream : InputStreamReader ファイル名: String System.in: InputStream : FileWriter : InputStreamReader : BufferedWriter write(...) close() : FileReader : PrintWriter println(...) close() : BufferedReader readLine() close() System.out: PrintStream println(...) close()

バイトストリーム ファイル名: String : FileInputStream : FileOutputStream バイト列(データ列)の読み書きに関する典型的な呼び出し連鎖. ファイル名: String : FileInputStream : FileOutputStream : BufferedInputStream int read() close() : BufferedOutputStream write(int) close()

入出力クラスの基本 基点はファイル名やストリーム. ストリーム: データの流れを示す抽象概念. 詳細はOSの授業にてやります. いくつかのクラスを連鎖することで,扱う対象が単なるデータから情報に近くなっていく. 単なるbit列から文字列になったりする.

XMLEncoder/Decoder Javaのオブジェクト(インスタンス)を手っ取り早く外部データ化するAPI. この外部データ化することを「永続化」と呼ぶ. ファイルに保存とか,プログラム同士のデータ交換とか.

XML Extensible Markup Languageの略らしい. 要はラベルのついた箇条書きの文字列データ. 何故 EMLじゃないの? 謎. 要はラベルのついた箇条書きの文字列データ. Cの構造体やJavaのメンバ属性等,構造化,グループ化されたデータを扱うのに便利. 流行・・・・ XML文書を処理するためのAPIがどの言語でも豊富にある. あとはGoogleにでも聞いてください.

XMLEncode/Decodeの要件・利点 以下の要件を満たすクラスでないとならない. 無引数のpublicコンストラクタを持つ. 永続化したい属性にはsetter/getterがある. 利点 永続化形式をプログラマが決めなくてもよい. Cの演習でリスト構造のファイル保存形式を決めるような面倒はスキップできる. あるオブジェクトを永続化すれば,参照されているオブジェクトも一緒に永続化される. 無論,永続化の要件を満たさないとダメだけど.

Setter/Getter ある属性の値を設定(set)したり,獲得したり(get)したりするためのメソッド. アクセッサー(accesssors)とも呼ばれる. 属性の名前に従い,定められたメソッド名でないといけない. 例 属性名 abc setter ⇒ setAbc getter ⇒ getAbc

XMLEncoder/Decoderの連鎖 ファイル名: String : FileInputStream exetnds InputStream : FileOutputStream extends OutputStream : BufferedInputStream int read() close() : BufferedOutputStream write(int) close() :XMLDecoder readObject() close() : XMLEncoder writeObject() close()

無論,標準IOからもできます System.in: InputStream System.out: PrintStream OutputStream : BufferedInputStream int read() close() : BufferedOutputStream write(int) close() ..... PrintStream :XMLDecoder readObject() close() : XMLEncoder writeObject() close()

例題(XMLEncText1)の構造 mainメソッド 型Aの オブジェクト “sakana” 型Bの オブジェクト “tako”

例題(XMLEncText2)の構造 配列およびArrayListに対応している. mainメソッド 型Cのオブジェクト “ebi0” “tako” 型Cのオブジェクト “ebi1” 型Aの オブジェクト “sakana” 型Cのオブジェクト “ebi2” ArrayListで実装 型Cのオブジェクト “ebi3” 配列で実装 型Cのオブジェクト “kani0” 型Cのオブジェクト “kani1” 型Cのオブジェクト “kani2” 配列およびArrayListに対応している.

Swingの永続化 別に自分で保存形式をきめてもいい. しかし,XMLEncoder等を使うと凄く簡単に保存復元ができる. 特に,比較的トップレベルのJPanelから保存してしまえば,その上に乗っかっている部品もいもづるに保存される. 永続化条件を満たせば,Listener等も保存される. 例題(XMLEncDecSwing2)を参照.

JScrollPane0: JScrollPane 例題の永続化された構造 このオブジェクトを保存すると他も保存される. JPanel0: JPanel null: LayoutManager source : NullLayout2 listener : JButton source JScrollPane0: JScrollPane listener : Rectangle : SaveAdapter : Rectangle : TextArea 他のオブジェクトから参照されるオブジェクトには名前(id)がある.

JScrollPane0: JScrollPane 永続化構造の条件 保存するオブジェクト以下の参照関係が閉じていること. 前ページはOK 以下はダメ このオブジェクトを保存すると他も保存される. 他のPanel: JPanel null: LayoutManager JPanel0: JPanel source 上記の パネルが マズい : NullLayout2 listener : JButton JScrollPane0: JScrollPane ※ 絶対ダメというわけじゃないが, 復元のプログラムが複雑になる.

例題 XMLEncDecArrayCollection1 Genericsに基づくCollectionを使ってみた. 大学には学部がいくつかあり,学生が幾人かいる. 学部は簡単に変化しないので,配列で実装. 学生は流動的なのでArrayListで実装. out.xml というファイルにデータを保存するように実装.

例題のメモリーイメージ

XMLEncoder/Decoder の利点 インスタンスをプログラマがテキスト列等に展開・復元する手間が不要です. XML表現なので他の言語(perlやc等)でも作成したデータを容易に扱えます. ただし,XML対応のAPIが整備されている場合. 複雑ではありますが,テキストファイルなので,ファイルの中身を目視確認できます. この授業の演習ではなるだけXMLEncoder/Decoderを使ってみてください.