Java

「Java(TM) Platform SE binary は動作を停止しました」 Avast 環境での対処

「Java(TM) Platform SE binary は動作を停止しました」が出て java -version も動かない場合 環境 Windows7 Pro 64bit JDK8 64bit Avast Avast の挙動監視シールドが C:\ProgramData\Oracle\Java\javapath\java*.exe の実行にちょっかい出しているのが原因…

Java (JCE) で AES 暗号化するときの PKCS#5 の実態は PKCS#7 なのか?

結論 JCE (Java Cryptography Extension) の AES/CBC/PKCS5Padding のパディングは、実際には PKCS#7 でパディングしている。 (少なくとも Oracle Java8_141 環境下では) 経緯 Java で AES 暗号化を扱う機会があり、ググっていたところ AES/CBC/PKCS5Padding…

Listen 0.0.0.0 in Java

Java で Socket Listen するときのアドレスを InetAddress.getByName("0.0.0.0") で与えると、 IPv4 の 0.0.0.0 と IPv6 の [::] の両方を Listen しちゃって、v4v6の両方で接続できちゃう ようになるような(今更)

eclipse のデフォルト文字コードの変更

eclipse で開いて文字化け、「ふぁっきんms932!」と叫んだときに。eclipse.ini に -Dfile.encoding=utf-8を追加設定→一般→ワークスペース で変更する手もあるけど、そちらはワークスペース単位なので。「eclipseで開くのは UTF-8 に決まってるだろぉぉぉぉ…

Commons CLI でソートせずにオプション一覧を出力する

Commons CLI で設定したオプションをソートせずに help 表示・出力する方法。HelpFormatter#setOptionComparator に null を渡せばソートが無効化される。HelpFormatter のデフォルトでは、 Options に設定したオプションが通常の文字列順序にソートされて出…

JSON の Jackson が勝手に Stream を close してしまう問題

問題 JSON ライブラリ Jackson の ObjectMapper を使ったシリアライズ・デシリアライズで、Stream や Reader/Writer を対象にしたメソッドを使うと、そのStream, Reader/Writer が自動的に close されてしまうので、再び読み書きしようとした際に IOExceptio…

Java InputStreamReader、 Windows でのデフォルト文字コード

Java の InputStreamReader、 Windows 環境ではデフォルト文字コードは UTF-8

Gradle でソースの一部を除外した jar ファイルの作り方

Gradle で Ant の jar タスクで言うところの exclude のやりかた。 task jarTare(type: Jar) { baseName = 'Tare' from sourceSets.main.output exclude('jp/ne/hatena/d/samples/shell/**') } baseName は出力する jar ファイルのファイル名。 src/main/jav…

JavaとXMLと名前空間

XML を DOM で扱う場合、 DocumentBuilderFactory#setNamespaceAware(true) で名前空間が有効になる DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware(true); DocumentBuilder builder = factory.newDocu…

Jetty8で作るWebSocketチャット(実行編)

最後は実行編です。まず、サーバを立ち上げます(classpathは先に通しておいてください)。 > java WebSocketTest 2011-10-18 18:29:04.406:INFO:oejs.Server:jetty-8.0.3.v20111011 2011-10-18 18:29:04.517:INFO:oejs.AbstractConnector:Started SelectCha…

Jetty8で作るWebSocketチャット(ブラウザ側編)

前エントリに続いてブラウザ側の実装について。こちらは単純ですね。 WebSocket の有無を確認して、使えるなら WebSocket の URL を指定してコネクションを開く。 後は、メッセージが届いたら div ブロックを追加してメッセージ表示。送信ボタンが押されたら…

Jetty8で作るWebSocketチャット(サーバ側編)

Jettyをサーバに使ったWebSocketベースのチャットサンプルのようなものを作ってみた。ターゲットは Jetty 8 と Firefox7, Chrome14。 WebSocket のバージョンは draft-ietf-hybi-thewebsocketprotocol-10 になるはず。 (WebSocket(Wikipedia) の実装状況参…

MessagePack-RPC Java binding の Server の止め方

MessagePack-RPC Java版の Server が終了してくれないトラブルで20分ほどはまったのでメモ。Server をデフォルトコンストラクタで起こして使ってると、close() を読んで止めたつもりでもスレッドが残ってプロセスが止まってくれません。残ってるスレッドの正…

Servlet の doXXX が呼ばれるタイミング on Jetty6

Jetty6 において、Servlet の doXXXX 系ハンドラメソッドがHTTPリクエストのどのタイミングで呼ばれるのかをちょっと調べてみた。結果:HTTP リクエストヘッダが全て届いた時点でハンドラメソッドが呼びだされる。リクエストのボディは未着なことがある。要…

Java で Thrift を使ってみて

Java で Thrift を試してみて得た know-how(あくまで独自研究なので注意) マルチスレッドと Thrift IDL から起こした Thrift.Client クラスはインスタンスのスレッド間で共有できない。 より正確に言うと、Thrift.Client 1つが1コネクションに対応してい…

Thrift で null を返すには?

Thrift では C++との相互運用の都合で RPC の応答に null を返すことができない模様。(呼ばれた側で return null; ができない)*1厳密には return null; できるわけですが、その場合クライアント側で TApplicationException: getFoo failed: unknown result a…

Java で Thrift ってみる on Windows その2

その1で環境が整ったので実際に RPC コードを作ってみる。 IDL ファイルの作成 RPC のメソッド定義にあたる IDL ファイルを作る。 お試しと言うことで単純な物を。 見ての通り String hello(String arg); 相当 Hello.thrift service Hello { string hello(1…

Java で Thrift ってみる on Windows その1

Java で使える高速な RPC ミドルを探して Thrift を試してみたのでメモ いるもの Apache Thrift これがなけりゃはじまらない Thriftコンパイラのバイナリパッケージ Thrift IDL から言語毎のコード生成するのに必要。Linuxだと簡単にビルドできるけど、Windo…

日本語ファイル名を含んだzipファイルの展開

アーカイブ内に日本語ファイル名なファイルを含むzipファイルをJavaで解凍・展開するには。 コード自体は「java zip 展開」あたりでググればすぐ出てくる。やまろうのJavaなわけ/Vol.42 JavaでZIP解凍。日本語ファイル名対応 http://yamarou.at.infoseek.co.…

axis メモ

Axis 1.2.1 + Tomcat 5.5.25 + JDK 1.5.14 でトラブったメモ。 webapp/axis/lib を common/lib に置いたときはwebapp/axis/lib をクリアしとかないと競合して痛い目に合う。 モジュールを common/lib に置くときは simplelog.properties は common/classes …

Java で Zipf 分布な乱数を生成

Zipf 分布な乱数を作るジェネレータを作ってみた。車輪の再発明なのは重々承知。 たぶんもっとマシなライブラリがどこかにあるだろうけど、頭使わずに使えそうな単機能なのがググってもサクッとでないので作ってみた。てきとーに作ったので精度は不明。使う…

Map 内の要素からランダム抽出するには?

Map が持ってる要素の中からランダムに 1 要素を取り出すには keySet を Array に変換して、その中からランダムに選択するしかないのかな? String[] keys = map.keySet().toArray(new String[map.size()]); String value = map.get(keys[rnd.nextInt(keys.l…

Java BouncyCastle と PHP mcrypt のパディング処理の違い

OpenPNE の DB を Java から叩こうとしたときにはまったメモ。先に結論を書くと、 PHP mcrypt の zero padding は元データが8の倍数長の場合は padding しない。 Java BouncyCastle の zero padding は元データが8の倍数長でも padding ( 8 バイトの 0x00 を…

Ant から eclipse コンパイラを使う

Ant から eclipse 内蔵コンパイラを使ってコンパイルするのにつまづいたのでメモ。EclipseWiki見ただけじゃ解決せず。調べていったらJavalobbyに答えがあった。まず、Ant の build.xml には、コンパイルタスクの前に build.compiler プロパティに org.eclips…