Для моего варианта использования я хочу передать класс (а не объект, фактический файл класса) через соединение Socket, а затем загрузить этот класс на принимающей стороне.ClassLoader: Обработка класса как ресурса - безопасная или детальность реализации?
Класс включен нормально в проект (на отправляющем конце), поэтому его где-то на пути к классу.
У меня есть весь код работает, но на самом деле получить файл класса из пути к классам, мне пришлось прибегнуть к несколько странно плохо обращались класс как ресурс (код раздели до существенной части):
public class ClassTransport {
public byte[] data;
public String qualifiedName;
public static ClassTransport create(Class<?> theClass) throws Exception {
ClassTransport result = new ClassTransport();
result.qualifiedName = theClass.getName();
// brute force derive the class file name
String classResourceName = theClass.getName().replace('.', '/') + ".class";
ClassLoader cl = theClass.getClassLoader();
try (InputStream in = cl.getResourceAsStream(classResourceName)) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
int b;
while ((b = in.read()) >= 0) {
out.write(b);
}
out.close();
result.data = out.toByteArray();
}
return result;
}
}
Это работает, но это на самом деле безопасно, чтобы сделать это, или это нарушает какие-либо технические характеристики - в частности, каковы possibilites, где это может терпят неудачу, чтобы получить класс в будущем JRE релизы или на конкретной платформе?