Akira's Blog

神奈川在住のITエンジニアの雑記です。主にプログラミング(Perl, Java など)やネットワーク技術についての小ネタを、ちょっとずつ書いていきます。

Java

JavaでSNMP GetBulk

JavaでSNMP Get Bulk を実行するコードを作ってみた。とりあえずざっと作ってみただけなので、SNMP要求を出すターゲットの情報などはソース中にハードコードしている。 実行すると、localhost上のSNMPエージェントに対して、.1.3.6.1.2.1.1 から数えて20個の…

MessageListenerクラスのonMessageメソッド

JavaのJMS(Java Message Service)の受信側でコールされるMessageListener#onMessage()は、並列して走ることがあるのか調べてみた。 まず、JavaDocを読んでみる。 ・・・the onMessage method is not called with the next message until the session has com…

staticな内部クラス

Javaではクラスの中にクラスを定義することができる。これを内部クラスと言う。この内部クラスを定義する際、staticを付けることができる。今日はどういう時に内部クラスにstaticを付けるべきなのか書く。 結論から言ってしまうと、内部クラスにはstaticを付…

ソースコードを解析する時のコツ

仕事柄、大規模なJavaプログラムのソース解析をすることが多い。自分が書いた部分なら少しソースを見れば思い出すが、他人が書いた部分で、かつドキュメントもないとなると、なかなか辛いこともある。そんな時に解析対象の部分のソースを理解するために自分…

Javaにおける処理の失敗の伝え方

Javaのメソッド内の処理の失敗を上位に伝える方法として、以下がある。 例外で伝える 戻り値で伝える C言語出身の自分としては、まず「戻り値で伝える」から入ったが、Javaのような例外処理機構を持った言語では例外を使って使っていった方が良いのではない…

Javaの内部の文字コード

Javaの内部の文字コードは UTF-16 である。なので、Javaのプログラムが外部から読み込んだ SJISやUTF-8などの文字列は、JavaのStringオブジェクトになる際に (内部コードである) UTF-16 に変換される。例えば、以下のサンプルプログラムの通り、(外部文字列…

Javaでスレッドを作成する時の注意点

まず、Javaでスレッドを作成する基本的な方法は、以下の2つである。 Threadクラスを継承したクラスのオブジェクトを生成して、そのオブジェクトのstart()メソッドを実行する。 Runnableインタフェースを実装したクラスのオブジェクトを生成し、それを引数と…

Javaのスタックトレースを解析する時のコツ

フレームワークなどを多用した大規模なJavaプログラムにおいて、エラーが起きてログにスタックトレースが出ると、その量が膨大過ぎてどうやって解析すれば良いのか困ることがある。そんな時に自分が心掛けていることを書く。 まず、アプリケーション独自の部…

メソッド間で変数をやり取りする方法

Javaでメソッド間で変数をやり取りする方法について書く。まずは一覧。 引数で渡す メンバ変数に格納して渡す static変数に格納して渡す シングルトンなクラスのオブジェクトに格納して渡す 以下、それぞれの使いどころと注意点について、少し詳しく説明する…

JavaのExecutorServiceで簡単マルチスレッド

Javaでマルチスレッドなプログラムを書く場合、Java1.5から導入された ExecutorService を使うと簡単に書ける。 以下は ExecutorService を使った簡単なサンプルプログラムである。 import java.util.Date; import java.util.concurrent.Callable; import ja…

Javaでsnmpwalk

Javaでsnmpwalkするソースを作成した。snmpwalkとは、内部でsnmp get-nextを繰り返して、SNMPエージェントからMIBツリー配下のMIBを次々取ること。 SNMPの通信のところを一から作るのは難しいので、snmp4j ライブラリを使用している。なので、前提として snm…

byte型とint型の変換

以前、Javaのbyte型とint型との変換について勉強するために作成したテストコード。 public class testByte { public static void main(String[] args) { // Test1 byte byteData = (byte) 0xC7; // 11000111 // If there is no "(byte)", 0xC7 is looked as …

バイト列と16進ダンプとの変換

バイト列と16進ダンプ文字列との変換について勉強するために作成したテストコード。 binToHexString()は、バイト配列を16進ダンプ文字列に変換するメソッドで、hexStrToBin()は、その逆を行うメソッドになっている。 public class ChangeBinHex { public sta…

keystoreとtruststore

たびたび目にするJavaのkeystoreとtruststore。よく忘れてしまい、そのたびに調べるので、、ここに概要を書いておく。 keystore:自サーバの証明書(公開鍵を内包)と、それに対応する秘密鍵が入っている。自サーバの証明書が証明書発行局(CA)から配布されたも…