カテゴリー別アーカイブ: ストリーム

Java チャットアプリ

JavaのSocketを利用したコンソール上で動作するチャットアプリを実装してみました.

1. まずは, サーバー側を起動して.
2. 別のコンソール上でクライアント側をポート番号を指定して起動します.

3. ‘quit’を入力すれば終了します.

現状の実装では, 1クライアントしか接続できませんが, 今後はマルチスレッドを利用して1対多の接続が可能になるように実装する予定です.

Java ソケットプログラム

Javaでソケット通信する簡単なプログラムを実装してみました.

・サーバー側
・クライアント側

まずは, サーバー側のプログラムをコンソールで起動してください.
現状では, 1回の通信で終わってしまうので, 簡単なチャットレベルのことをできるように, 近い将来改良しておきます.

ちなみに, 以前, C言語でシステムコールを利用したソケットプログラムをごりごり書いていた時期がありました…

デコレータパターン

デコレータパターンとは, 既存のオブジェクトに変更をすることなく, 新しい機能を追加することです.

代表的な実装例としては, Javaのストリームですね.

InputStream input    = new FileInputStream("input.txt");
OutputStream input = new FileOutputStream("output.txt");

これを, InputStreamReader / OutputStreamWriterでデコレートすることで, バイトストリームを文字ストリームに変換するという機能が追加できます.

Reader input  = new InputStreamReader(new FileInputStream("input.txt"));
Writer output = new OutputStreamWriter(new FileOutputStream("output.txt"));

さらに, さらに, BufferedReader / BufferedWriterでデコレートすることで, バッファリングという機能が追加できます.

Reader input  = new BufferedReader(new InputStreamReader(new FileInputStream("input.txt")));
Writer output = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("output.txt")));

JavaScriptの場合, プロトタイプ継承 (インスタンスの継承) という動的な継承関係をもてることから, デコレータパターンとは非常に相性が良いです.

さらに, 言えばjQueryではデコレータを実現するためのメソッドがあります.

//再帰的にデコレートするために, 第1引数にはtrueを指定する.
//デコレートした新規オブジェクトを返すために, 第2引数には空のオブジェクトを指定する.
var settings = $.extend(true, {}, defaults, options);

jQueryプラグインの実装では, イディオムのようなコードですね.

Java バイトストリームから文字ストリームへの変換

Androidアプリの作成では, ファイル (ストリーム) 処理をあつかう機会がなかったので, ちょっとしたサンプルコードを作成してみました.

変換のためには, InputStreamReader / OutputStreamWriterを利用します. これらは, 文字ストリームの抽象基底クラスであるReader / Writerを継承しています.

Javaのストリームを学ぶことはデコレータパターンの好例を学ぶことでもあります.