なぜ CLASS を TXT に変換するのですか?
.class ファイルはコンパイルされたバイナリバイトコードであり、処理なしでテキストとして読むことはできません。開発者は、元の .java ソースが利用できない場合にクラスの動作を確認したり、2つのコンパイル済みバージョンの差分(diff)を取ったり、ライブラリのパブリック API を文書化したりするために、.txt への逆アセンブルまたはデコンパイルを行います。
CLASS から TXT への変換方法
javap (JDK) FREE
ターミナルで javap -c -p MyClass を実行してバイトコード命令を出力し、> MyClass.txt でファイルにリダイレクトします。定数プールやクラスバージョンの詳細を含めるには -verbose を追加します。
JD-GUI OPEN-SOURCE
.class ファイルを JD-GUI にドラッグすると、再構成された Java ソースがエディタに表示されます。«File» > «Save All Sources» を使用して .java ファイル(プレーンテキスト)としてエクスポートし、必要に応じて .txt にリネームします。
CFR OPEN-SOURCE
java -jar cfr.jar MyClass.class > MyClass.txt を実行して、再構成された Java ソースを直接テキストファイルにリダイレクトします。
これらの形式について
CLASS ファイルはコンパイルされた Java バイトコードであり、javac が .java ソースファイルから生成する出力です。実行するには Java (JDK) がインストールされている必要があり、«java MyClass» コマンドを使用します。コードの内容を確認するには、JD-GUI などのデコンパイラで開きます。CLASS…
.CLASS の詳細を開く →TXT ファイルは、書式設定のないプレーンテキストであり、あらゆるコンピュータにおいて最もシンプルなドキュメント形式です。ダブルクリックすると、Windows では メモ帳、macOS では TextEdit、Linux では gedit…
.TXT の詳細を開く →品質と注意点
.classファイルはマジックバイト0xCAFEBABEで始まります。テキストエディタで開くと、読み取り可能な内容ではなくバイナリのゴミが表示されます。javapの出力はバイトコードのニーモニック(invokevirtual、aloadなど)であり、Java ソースではありません。ソースに近い出力が必要な場合は、JD-GUI または CFR を使用してください。javapに-verboseを追加すると、クラスファイルのメジャーバージョン、定数プール、属性テーブルが出力に含まれます。
よくある質問
javap の出力とデコンパイラの出力の違いは何ですか?
javap はバイトコード命令(ニーモニック)を表示します。JD-GUI や CFR は Java ソースの構文を再構成します。どちらもプレーンテキストを生成しますが、可読性は大きく異なります。javap を使用するために追加のインストールは必要ですか?
javap はすべての JDK インストールに含まれています。Java 開発ツールがインストールされていれば、すでに利用可能です。Java をインストールせずに .class ファイルを .txt に変換できますか?
javap、JD-GUI、CFR はすべて実行に Java を必要とするため、JDK または JRE のインストールが必須です。