FileDocCategorySizeDatePackage
ClassReader.javaAPI DocJ2ME CLDC 1.15877Wed Feb 05 15:56:04 GMT 2003util

ClassReader

public class ClassReader extends Object

Fields Summary
int
verbosity
ConstantPool
t
Constructors Summary
public ClassReader(ConstantPool cp, int verb)

    t = cp;
    verbosity = verb;
    
Methods Summary
private intgetMagic(java.io.InputStream file)

    DataInputStream data = new DataInputStream( file );
    int n = 0;
    file.mark( 4 );
    try {
        n = data.readInt();
    } finally {
        file.reset();
    }
    return n;
    
public intreadClass(java.lang.String classname, ClassFileFinder finder, java.util.Vector done)

    InputStream f = finder.findClassFile( classname );
    if ( f == null ) return 0;
    try {
        return readStream( classname, f, done );
    } catch ( IOException e ){
        e.printStackTrace();
        return 0;
    }
    
public intreadFile(java.lang.String fileName, java.util.Vector done)

    InputStream infile;
    infile = new BufferedInputStream(new FileInputStream( fileName ) );
    return readStream(fileName, infile, done);

    
public intreadStream(java.lang.String inputName, java.io.InputStream infile, java.util.Vector done)

    int magicNumber = getMagic( infile );

    int ndone = 0;
    if ( magicNumber == Const.JAVA_MAGIC ){
        /*
         * We have a solo class.
         */
        ClassFile f = new ClassFile( inputName, infile, verbosity>=2 );
        if ( verbosity != 0 )
        System.out.println(
            Localizer.getString("classreader.reading_classfile", 
                                inputName));
        if (f.readClassFile( t ) ){
        f.clas.externalize( t );
        done.addElement( f.clas );
        ndone+=1;
        } else {
        throw new DataFormatException(
            Localizer.getString("classreader.read_of_class_file", 
                                 inputName));
        }
    } else if ( magicNumber == MultiClass.MULTICLASS_MAGIC ){
        /*
         * We have an mclass file.
         */
        MultiClass m = new MultiClass( inputName, infile, null, verbosity>=2 );
        if (m.readMultiClassFile() ){
        ClassInfo c[] = m.classes;
        int n = c.length;
        for ( int i = 0 ; i < n; i++ ){
            c[i].externalize( t );
            done.addElement( c[i] );
        }
        ndone += n;
        } else {
        throw new DataFormatException(
            Localizer.getString("classreader.read_of_multi-class_file", inputName));
        }
    } else {
        throw new DataFormatException(
        Localizer.getString("classreader.file_has_bad_magic_number", 
                     inputName, Integer.toString(magicNumber)));
    }
    try {
        infile.close();
    } catch ( Throwable x ){ }
    return ndone;
    
public intreadZip(java.lang.String fileName, java.util.Vector done)

 
    int i = 0;

        ZipFile zf = new ZipFile(fileName);
        Enumeration enum = zf.entries();
        while (enum.hasMoreElements()) {
            ZipEntry ent = (ZipEntry)enum.nextElement();
        String name = ent.getName();
        if (!ent.isDirectory() && 
        (name.endsWith(".class") || name.endsWith(".mclass"))) {
        int length = (int)ent.getSize();
        byte buffer[] = new byte[length];
        try { 
                    new DataInputStream(zf.getInputStream(ent)).readFully(buffer);
            i += readStream(name, new ByteArrayInputStream(buffer), 
                    done);
        } catch (IOException e) { 
            System.out.println(Localizer.getString("classreader.failed_on", name));
        }
        }
    }
    return i;