投稿

Javaデモ/JSPages「ファイル入出力、ファイル・ロック」:「RandomAccessFile、FileChannel、Charset、ByteBuffer」(Ver.2)

開発環境はEclipseです。 Eclipseにおいてサーバー・サイド用Javaプロジェクトを作る場合は「動的Web」でプロジェクトを作る必要が有ります。 「動的Web」プロジェクト作成時には、必ず「web.xmlデプロイメント記述子の生成」チェックボックスをチェックしてして下さい(下記参照)。 Webアプリ向け開発手順 http://www.javaroad.jp/opensource/js_eclipse6.htm 現在、文字エンコードは多数ありますが、「UTF-8、Shift_JIS」の2つがインターネットでのデファクト・スタンダードですが、Windowsの場合はShift_JISとは微妙に違うMS932(CP932)がデファクト・スタンダードになります(なのでWindowsにおいてShift_JISと言う場合は、基本的にMS932(CP932)を意味します)。 指定されている文字エンコードとセーブ時の文字エンコードが違うと全角文字が文字化けするので注意して下さい。 【このデモの略説】 新規データをファイルの先頭に追加して行きます。 サーバー・サイドの場合、多数のユーザーが同時にアクセスした場合を考慮する必要があります。 具体的にはサーバー・サイドの場合は、ファイル出力時にファイルをロックしないとデータ破壊される危険性があります。 また ファイルの書き換え(ファイル入力してファイル出力する)は、ファイル入出力を一体としてロックしないとデータ破壊される危険性があります、つまり ファイル入力とファイル出力でファイル・ロックを2つに分けるとファイル・データが破壊される危険性があります。 下記デモでもファイル入力とファイル出力でファイル・ロックは1つだけだと言うことに注意して下さい。 try-with-resources文を使っているので自動クローズがサポートされるので、クローズを明記する必要は有りません。 クローズすると自動的にロックも解除されるので、ロックの解除も明記する必要は有りません。 「oRWChannel.truncate(0);」は一旦ファイル・サイズをゼロにしています。 そうしないと(記事を削除した場合など)以前よりファイル・サイズを小さくしたい場合に、前のデータが残ってしまいます。 【WebContent/MyJSPages.jsp】 ※既存の「We...

Javaデモ/単純化している「CUI対戦デモ」 オブジェクト指向プログラミング

 このデモの多態性(ポリモーフィズム)は あくまでも形式的な多態性(ポリモーフィズム)なので、多態性(ポリモーフィズム)に関しては別途 勉強が必要です。 下記『Javaデモ/Swingグラフィック「Thread、Figure」(2)』は「抽象化(アブストラクション)、継承(インヘリタンス)、多態性(ポリモーフィズム)、合成(コンポジション)」を具現化していますが、多態性(ポリモーフィズム)の教材としても最適です。 なお、このデモでは「合成(コンポジション)、集約(アグリゲーション)」が曖昧になっています。 Javaデモ/Swingグラフィック「Figure、Thread」(2) オブジェクト指向プログラミング https://sphinx1335.blogspot.com/2026/03/javaswingfigurethread2.html もっとガッツリやりたい場合は下記で勉強すると良いでしょう。 Javaデモ/CUI対戦デモ(10) オブジェクト指向プログラミング https://sphinx1335.blogspot.com/2026/03/javacui10.html 集約とコンポジションの例えについて https://qiita.com/gatapon/items/5e3292f897ab4f817001 >コンポジション >保持されているものが保持しているものの一部である場合 >この書籍では「車とエンジン」で例えられています。 >集約 >独立して存在できる何かのコレクションがある場合 >こちらは空港と飛行機で例えられています。 その他の要件としては親オブジェクトが消滅する時に、確実に子オブジェクトも消滅するなら合成(コンポジション)と考えて良いです。 CUI(character user interface)の対戦デモです、そして「抽象化(アブストラクション)、継承(インヘリタンス)、合成(コンポジション)」のデモでもあります。 あくまでもデモなので、手抜きをしています、「getter、setter」メソッドを どうするとか、「治癒、防御」を どうするかとか。 「継承(インヘリタンス)」で対応できない場合に「集約(アグリゲーション)、合成(コンポジション)、委譲(デリゲーション)」などを使います、オブジェクト...

Javaデモ/Swing「Sinグラフを横スクロールさせる、Thread、排他制御(synchronized)、最適化の抑制(volatile)」(007)

イメージ
 Sin グラフを横スクロールさせる、ComboBox で「波長の数、カラー」を指定して、[Make]ボタンで新しい Sin グラフを追加できます。 2つ以上の Sin グラフを表示すると、白色で合成波を表示します。 なお、SinGraph の Draw メソッドは使用していません。 このデモは「Concurrency Utilities」のスレッドを使用しています。 排他制御(synchronized)、最適化の抑制(volatile)も使用しており、特に排他制御(synchronized)は必要最小限にするように熟慮しています。 (知らぬ間に)古いタイプのThreadが非推奨に?、(正式な非推奨では無いかもしれないが)そんなクズみたいなモノを何時までも使わないでくれよ、って話。 スレッドは「Concurrency Utilities」のスレッドが強く推奨されます。 なお 新しいJavaでも古いタイプのThreadを使ってたら意味ないので注意して下さい、ただし素のJavaとAndroid Javaは内部的には別モノなので、Android Javaなら普通の(古いタイプの)Threadでおkです。 下記 動画を参照して下さい、青色がCUPの未使用率、緑色がCUPの使用率だと思われます。 その動画のコンソール入力に注目すると、「ConcurrencyTest」を実行すると、CUPの使用率が ほぼ100%になり、圧倒的に効率が上がります(逆に言うと古いタイプのThreadが如何にクズかと言うことでも有りますが)。 Concurrency Utilities for EE 7 https://yoshio3.com/2013/05/15/concurrency-utilities-for-ee-7/ 【SinGraph007.java】 import java.awt.EventQueue; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.BorderLayout; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; import javax.swin...

Javaデモ/CUI対戦デモ(10) オブジェクト指向プログラミング

 どちらかのPartyが全滅するまでループするだけの超単純なデモです。 長時間 掛かったりする訳では無いので実際に実行してみると良いでしょう。 このデモの多態性(ポリモーフィズム)は あくまでも形式的な多態性(ポリモーフィズム)なので、多態性(ポリモーフィズム)に関しては別途 勉強が必要です。 下記『Javaデモ/Swingグラフィック「Thread、Figure」(2)』は「抽象化(アブストラクション)、継承(インヘリタンス)、多態性(ポリモーフィズム)」を具現化しているので、多態性(ポリモーフィズム)の教材としても最適です。 なお、このデモでは「合成(コンポジション)、集約(アグリゲーション)」が曖昧になっています。 Javaデモ/Swingグラフィック「Figure、Thread」(2) オブジェクト指向プログラミング https://sphinx1335.blogspot.com/2026/03/javaswingsinthreadsynchronizedvolatile0.html また、この「CUI対戦デモ」プログラムが難しい場合は下記の『単純化している「CUI対戦デモ」』で勉強してみると良いでしょう。 Javaデモ/単純化している「CUI対戦デモ」 オブジェクト指向プログラミング https://sphinx1335.blogspot.com/2026/03/javacui.html 集約とコンポジションの例えについて https://qiita.com/gatapon/items/5e3292f897ab4f817001 >コンポジション >保持されているものが保持しているものの一部である場合 >この書籍では「車とエンジン」で例えられています。 >集約 >独立して存在できる何かのコレクションがある場合 >こちらは空港と飛行機で例えられています。 その他の要件としては親オブジェクトが消滅する時に、確実に子オブジェクトも消滅するなら合成(コンポジション)と考えて良いです。 CUI(character user interface)の対戦デモです、そして「抽象化(アブストラクション)、継承(インヘリタンス)」のデモでもあります。 あくまでもデモなので、手抜きをしています、「getter、setter」メソッドを ...

JavaScriptデモ/CanvasBound002 オブジェクト指向プログラミング

 (図形が動くだけの)グラフィック表示のデモです、そして「継承(インヘリタンス)、多態性(ポリモーフィズム)、合成(コンポジション)」のデモでもあります。 このデモは「継承(インヘリタンス)、多態性(ポリモーフィズム)、合成(コンポジション)」を具象化しているので、オブジェクト指向プログラミングの教材として参考になるでしょう。 あくまでもデモなので、手抜きをしています。 下記は実際に動くページです。 https://ano1335-chan.github.io/web/demo/CanvasBound002.htm 参考 集約とコンポジションの例えについて https://qiita.com/gatapon/items/5e3292f897ab4f817001 >コンポジション >保持されているものが保持しているものの一部である場合 >この書籍では「車とエンジン」で例えられています。 >集約 >独立して存在できる何かのコレクションがある場合 >こちらは空港と飛行機で例えられています。 その他の要件としては親オブジェクトが消滅する時に、確実に子オブジェクトも消滅するなら合成(コンポジション)と考えて良いです。 オブジェクト指向プログラミングの1番の肝は多態性(ポリモーフィズム)であり、その多態性(ポリモーフィズム)の肝は「共通の機能」(メソッド)を抽出することです(2番目の肝は「集約(アグリゲーション)、合成(コンポジション)」です)。 ちなみに肝となる「共通の機能」が複数 存在する場合もあります。 この場合は「Drawing()、Move()」が肝となる「共通の機能」となりますが、その肝となる「共通の機能」が抽出できるか どうかが、多態性(ポリモーフィズム)を具現化できるか どうかの基準になります。 肝となる「共通の機能」(メソッド)は、その機能ごとに完全にシグネチャが一致していなければなしません、ただし コンストラクタや その他のメソッドは必ずしもシグネチャが一致しなくても良いです。 当然 継承関係も最適になるように考察する必要があります。 JavaScriptは動的型付け言語(変数に何でも入る)なので、静的型付け言語においてのオブジェクト指向の(厳密な)多態性(ポリモーフィズム)とは違いますが、動的型付け言語の「なんち...

JavaScriptデモ/FieldRoll 016 オブジェクト指向プログラミング

 キャラをカーソル・キーで移動できます。 ランダムに敵が出現します、スペース・キーで敵を攻撃でき、敵HPが減るとHP値に応じて敵が薄くなります。 ランダムに魔法陣が出現します、魔法陣を踏むと別のフィールドに転移します。 ランダムに宝石が出現します、宝石に接触すると取得でき、レベルに「0.1」加算されます。 ランダムに宝箱が出現します、宝箱に接触すると蓋が開きます、スペース・キーで取得でき、レベルに「0.1」加算されます。 あくまでもデモなので手抜きをしています。 実際のページ http://ano1335-chan.github.io/web/demo/FieldRoll016/ 「ページ、画像」を完全に読み込むまで待機します。 処理が重くならないようにフィールドの表示は必要な部分だけを描画しています。 PCフレンドリーに対応していますが、モバイル・フレンドリーは考慮していません。 PCモニターの場合、現在4k画面(横幅3840px)が普及価格帯で販売されており、また高解像度モニターは(高価ですが)「5k画面(横幅5120px)、6k画面(横幅6016px)、8k画面(横幅7680px)」も販売されています(そのうち量産効果で安くなるか?)。 逆に低解像度モニターは(2020年9月現在、価格.com調べ)横幅が800pxと言う画面もあり、アスペクト比は「4:3、16:9」の2つがあるようです。 なお 1K画面(横幅1024px)だとアスペクト比は大抵は4:3になるでしょう。 「HD画面(横幅1280px)、フルHD画面(横幅1920px)、WQHD 2K画面(横幅2560px)、4K画面(横幅3840px)」だとアスペクト比は16:9になります。 なので「特定の解像度に依存するWebページ」だと、他の人のモニター解像度が違う場合や、自分がモニター解像度が違うPCに買い換えたりとかしたら正常に表示できません、だからこそ、それを欠陥Webページと言います。 Webページも、JavaScriptのグラフックスも、当然 それを想定して作成する必要が有ります。 ブラウザがBusyな場合に発生する、画像・移動時のワープ現象に対応しています。 ただし(画像では無く)グラフック図形の移動だとワープ現象は発生しにくいようです。 下記は、グラフック図形の移動で、ワープ現象・対策...