sig
  type t = {
    magic : Utils.u4;
    minor_version : Utils.u2;
    major_version : Utils.u2;
    constant_pool_count : Utils.u2;
    constant_pool : ConstantPool.t;
    access_flags : Utils.u2;
    this_class : Utils.u2;
    super_class : Utils.u2;
    interfaces_count : Utils.u2;
    interfaces : Utils.u2 array;
    fields_count : Utils.u2;
    fields : Field.info array;
    methods_count : Utils.u2;
    methods : Method.info array;
    attributes_count : Utils.u2;
    attributes : Attribute.info array;
  }
  type error =
      Invalid_magic_number of Utils.u4
    | Unsupported_version of Utils.u2 * Utils.u2
    | Invalid_this
    | Invalid_super
    | Invalid_super_interface
    | Invalid_parent_interface
  exception Exception of ClassFile.error
  val string_of_error : ClassFile.error -> string
  val read : InputStream.t -> ClassFile.t
  val write : ClassFile.t -> OutputStream.t -> unit
end