From: <no...@so...> - 2002-03-07 20:02:45
|
Bugs item #511493, was opened at 2002-02-01 00:21 You can respond by visiting: http://sourceforge.net/tracker/?func=detail&atid=112867&aid=511493&group_id=12867 Category: Library Group: None Status: Open Resolution: None Priority: 5 Submitted By: Matthew Conway (wr0ngway) >Assigned to: Samuele Pedroni (pedronis) Summary: jreload truncates large class files Initial Comment: The jreload Module does not read in the entire class file due to incorrect usage of InputStream.read(). The following example will fail unless the attached patch is applied. Edit the value of toolsjar to point to the tools.jar from your jdk, or use some other large class file from somewhere else. The patch also adds a getResourceAsStream() method for finding resources from the loadset. from jreload import makeLoadSet from java.lang import System toolsjar = "/path/to/jdk/lib/tools.jar" makeLoadSet('myls', [toolsjar]) # Any large class file causes a ClassFormatError from myls.com.sun.tools.corba.se.idl import Parser print "Success" ---------------------------------------------------------------------- >Comment By: Samuele Pedroni (pedronis) Date: 2002-03-07 21:02 Message: Logged In: YES user_id=61408 I think other code in the codebase may share similar problems and benefit from the approach. [Note to self: role of JVM/library bugs?] ---------------------------------------------------------------------- Comment By: Matthew Conway (wr0ngway) Date: 2002-03-07 20:37 Message: Logged In: YES user_id=407214 Kevin's getBytes() is definately a cleaner/better solution. ---------------------------------------------------------------------- Comment By: Kevin J. Butler (kevinbutler) Date: 2002-03-07 18:29 Message: Logged In: YES user_id=117665 I'm uncomfortable with a couple of aspects of this patch - the use of a member variable 'buf' makes the class loading process not thread safe (can ClassLoaders be used in multiple threads?). Also, this will retain a buffer as large as the largest class loaded in the process. It would probably be better to have a getBytes method something like: protected byte[] getBytes( InputStream s ) { int bufsize=4096; byte[] buf = new byte[ bufsize ]; ByteArrayOutputStream out = new ByteArrayOutputStream( bufsize ); int count; while( true ) { count = in.read( buf, 0, bufsize ); if ( count < 0 ) break; out.write( buf, 0, count ); } return out.getBytes(); } ---------------------------------------------------------------------- You can respond by visiting: http://sourceforge.net/tracker/?func=detail&atid=112867&aid=511493&group_id=12867 |