Re: dealing with ClassLoaders...
Mike Amling <mamling@chaff.us> wrote:
On 8/4/14 10:12 AM, Andreas Leitgeb wrote:
URL url=getSystemResource(name.replace('.', '/') + ".class");
byte[] classData = new byte[1024*1024*10]; int len = 0;
try {
len = url.openConnection().getInputStream().read(classData);
} catch (IOException e) {
e.printStackTrace();
}
You could buffer to a ByteArrayOutputStream.
for (int input; (input=source.read())>=0; ) {
buffer.write(input);
}
Thanks for your answer. You made me re-think my irrational
resistance against coding a loop for that task. :-)
Now, the snippet looks like this:
byte[] chunk = new byte[1024]; int len = 0;
URL url = getSystemResource(name.replace('.', '/') + ".class");
try {
InputStream is = url.openConnection().getInputStream();
ByteArrayOutputStream os = new ByteArrayOutputStream();
while ((len = is.read(chunk)) > 0) { os.write(chunk,0,len); }
chunk = os.toByteArray();
} catch (IOException e) { chunk = null; }
// if anything went wrong, there'll be an Exception on next line
// (be it NPE at chunk.length or from defineClass)
res = defineClass(name,chunk, 0, chunk.length);
I think, that's good enough for me now. I declare my problem
as solved. :-)
Thanks again to all who participated in this thread!