Написание собственного ClassLoader может быть довольно запутанным, особенно для новичка. Недавно мне нужно было динамически загрузить несколько банок, и я нашел этот ответ очень полезным. Он объясняет, как использовать ResourceFinder, класс из Apache xbean или что-то еще. Это единственный файл, который вы можете легко вставить в свой проект.
Наиболее выгодно для вашей ситуации, хотя ResourceFinder загружается по URL, функция readContents
(используемая для фактической загрузки файла JAR) выглядит следующим образом:
private String readContents(URL resource) throws IOException {
InputStream in = resource.openStream();
BufferedInputStream reader = null;
StringBuilder sb = new StringBuilder();
try {
reader = new BufferedInputStream(in);
int b = reader.read();
while (b != -1) {
sb.append((char) b);
b = reader.read();
}
return sb.toString().trim();
} finally {
try {
in.close();
reader.close();
} catch (Exception e) {
}
}
}
, который можно легко изменить для работы с любым потоком / блобом, который у вас есть.
Некоторые незначительные изменения в классе могут, я уверен, заставить его делать именно то, что вы хотите, или, по крайней мере, указать вам правильное направление. Писать ClassLoaders с нуля - это не весело.
EDIT:
Знаешь, я только что посмотрел еще раз и не уверен, что тебе удастся избежать незначительных изменений в ResourceFinder. Тем не менее, посмотрите, посмотрите, что вы можете получить от этого.