[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
double や float は浮動小数点の為、誤差が生じてしまいます。
Math#round を利用して四捨五入しようとしても 0 に近い方向に丸めるため期待した値にならない場合があります。 Java で正確に四捨五入を実現したい場合 java.util.BigDecimal を使わなければなりません。
丸めモードは ROUND_HALF_UP を指定します。
Java プログラムから外部コマンドを実行する為には、java.lang.Runtime の exec メソッドを使用します。 Runtime のインスタンスは Runtime#getRuntime で取得できます。
外部コマンドの標準出力を得る為には、 exec の戻り値である Process の getInputStream() を使用します。 そのままでは、標準出力には何も出力されませんので、Java で System.out.println() する必要があります。
Thread の起動は start() で行う。但し 1 度しか実行できない。 (run() が終了して再度 start() を実行してもスレッドの run() は呼ばれません) 同じスレッドを再度実行したい場合は new して start() を繰り返す。 また、start() から run() が呼ばれるまでの間隔は VM に依存しており、直ぐに呼ばれるわけではないので、 直ぐに run() が呼ばれる事を期待したソースを書かないように注意すること。
実行中の Thread を停止する場合に stop() は基本的に使用禁止。(詳しくは Java 非推奨スレッドプリミティブ を参照)
そこで、別途安全に Thread を停止できるように、 halt() を用意する。
halt() では halt_ を true にして while() を抜けさせる。処理が停止中の事も考えられるので interrupt() もやっておく。
Servlet による WEB アプリケーションでは画面遷移の方法に redirect(リダイレクト) と forward(フォワード) があります。それぞれの動作の違いとメリット、デメリットについてまとめておきます。
redirect | forward | |
---|---|---|
ソース |
response.sendRedirect("[ページ2]"); |
request.getRequestDispatcher("[ページ2]") |
処理の流れ |
クライアント [ページ1] を要求 ↓ サーバ [ページ2] に redirect 命令を返却 ↓ クライアント [ページ2] を要求 ↓ サーバ [ページ2] を返却 |
クライアント [ページ1] を要求 ↓ サーバ [ページ2] を返却 |
パフォーマンス | 悪い (リクエストを 2 回送信する必要がある) | 良い (通常通り 1 回のリクエストで良い) |
リクエスト情報 | 引き継がない (全く別の 2 つのリクエストの為) | 引き継ぐ (同一の 1 つのリクエストの為) |
転送可能範囲 | 外部サーバも OK | 同一サーバ内のみ |
同一サーバー内の処理には出来るだけ forward を使用する事。 別サーバーに転送したい時だけ redirect を使用するように心がける
javax.crypto パッケージを使って、文字列を暗号化して同じ鍵を使用して復号化します。 秘密鍵の生成には KeyGenerator の generateKey() を使用し、暗号化、復号化には Cipher の doFinal を使用します。
以下にアルゴリズムに AES を使用した場合の暗号化、復号化の実装例を書きます。