RLPark 1.0.0
Reinforcement Learning Framework in Java
|
00001 package rlpark.plugin.rltoys.experiments.scheduling.internal.messages; 00002 00003 import java.io.IOException; 00004 import java.io.InputStream; 00005 import java.io.ObjectInputStream; 00006 import java.io.ObjectStreamClass; 00007 00008 public class ClassLoading { 00009 public interface NetworkFindClass { 00010 Class<?> findClass(String name); 00011 } 00012 00013 private static boolean forceNetworkClassResolution = false; 00014 00015 public static ObjectInputStream createObjectInputStream(InputStream in, final ClassLoader classLoader) 00016 throws IOException { 00017 if (classLoader == null) 00018 return new ObjectInputStream(in); 00019 return new ObjectInputStream(in) { 00020 @Override 00021 protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException { 00022 String className = desc.getName(); 00023 if (forceFindClass(className)) 00024 return ((NetworkFindClass) classLoader).findClass(className); 00025 try { 00026 return Class.forName(className); 00027 } catch (ClassNotFoundException exc) { 00028 try { 00029 return classLoader.loadClass(className); 00030 } catch (ClassNotFoundException e) { 00031 } 00032 } 00033 throw new ClassNotFoundException(className); 00034 } 00035 }; 00036 } 00037 00038 public static void enableForceNetworkClassResolution() { 00039 forceNetworkClassResolution = true; 00040 } 00041 00042 public static boolean forceFindClass(String name) { 00043 if (!forceNetworkClassResolution) 00044 return false; 00045 if (name.startsWith("java.")) 00046 return false; 00047 return name.contains("$"); 00048 } 00049 }