This package makes it easy to read and write java classfiles. It does not, however, provide any help with displaying the contents of a classfile to the user (unless you count debug output), or disassembling the bytecodes.
This code snippet will read in a classfile and write it back out to a different file.
InputStream is = new FileInputStream(Foo.class);
OutputStream os = new FileOutputStream(FooCopy.class);
ClassInfo classInfo = new ClassInfo();
new ClassFileReader().read(is, classInfo);
classInfo.setName(FooCopy); // Java requires the class name to match the file name
new ClassFileWriter().write(classInfo, os);
Here is the API documentation.
Here is the source (56K).
Here is the VM Spec that I used.
The package can read obfuscated classfiles, like those generated by Crema, but it can not write them. Obfuscated classfiles have invalid data in them and the only reason they work is because most VMs ignore the data that is invalid (attributes like SourceFile, LineNumberTable, and LocalVariableTable). If a ClassFileReader encounters invalid data, it just ignores it.