Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!feeder.erje.net!eu.feeder.erje.net!newsfeed.fsmpi.rwth-aachen.de!eternal-september.org!feeder.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Andreas Leitgeb Newsgroups: comp.lang.java.programmer Subject: Re: dealing with ClassLoaders... Date: Tue, 5 Aug 2014 15:16:27 +0000 (UTC) Organization: A noiseless patient Spider Lines: 35 Message-ID: References: Reply-To: avl@logic.at Injection-Date: Tue, 5 Aug 2014 15:16:27 +0000 (UTC) Injection-Info: mx05.eternal-september.org; posting-host="7fd0c836d94caf9f0b88d96117d7c68e"; logging-data="10524"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+pikY+y80dwP+V4T1rEtQk" User-Agent: slrn/pre1.0.0-18 (Linux) Cancel-Lock: sha1:f1Tu8SBGiHUVCZ/XpjyJ0Yum4F0= Xref: csiph.com comp.lang.java.programmer:29568 Mike Amling 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!