// $Id: LoadStdinI.java,v 1.1 2002-07-14 22:04:13+09 kaiya Exp kaiya $ import java.io.*; public class LoadStdinI extends ClassLoader{ private byte[] data; private String myname; public LoadStdinI(InputStream i){ readBytes(i); myname=new Jcf(data).className(); } String lcname(){return myname;} protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException{ Class clazz = null; try{ return findSystemClass(name); } catch(Throwable e){} clazz=findLoadedClass(name); if(clazz != null){ return clazz; } clazz=myFindClass(name); if(clazz == null ){ throw new ClassNotFoundException(name); } if(resolve){ resolveClass(clazz); } return clazz; } void readBytes(InputStream is){ data=new byte[4096]; int total=0, n; try{ while((n=is.read(data,total,data.length-total))>=0){ if((total+=n) == data.length){ byte newdata[]=new byte[total*2]; System.arraycopy(data, 0, newdata, 0, total); data = newdata; } } byte[] b=new byte[total]; System.arraycopy(data, 0, b, 0, total); data=b; }catch(IOException e){} } private synchronized Class myFindClass(String name){ try{ return defineClass(name, data, 0, data.length); }catch(Throwable e){ System.out.println(e.getMessage()); throw new ClassFormatError(); } } public static void main(String args[]){ LoadStdinI loader=new LoadStdinI(System.in); try{ Class c=loader.loadClass(loader.lcname()); Runnable cmd=(Runnable)c.newInstance(); cmd.run(); }catch(Throwable e){ e.printStackTrace(); } } }