此代码确实返回null InputStream以及null URL.这是为什么?我有自己的类,我想获取实际的.class文件作为InputStream序列化为bytes [].
Class clazz = String.class;
String className = clazz.getName(); System.out.println(className);
URL url = clazz.getResource(className);
if( url != null )
{
String pathName = url.getPath(); System.out.println(className);
}
InputStream inputStream = clazz.getResourceAsStream(className);
if(inputStream != null )
{
System.out.println(inputStream.available());
}
最佳答案
首先,您需要上下文的类加载器.其次,您需要替换圆点.在类名中使用正斜杠/并在.class扩展名后缀以标识真实路径.
所以这应该工作:
String name = String.class.getName().replace(".", "/") + ".class";
URL url = Thread.currentThread().getContextClassLoader().getResource(name);
InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream(name);
编辑:我应该添加,inputStream.available()不是了解文件大小的方法.它只是返回可读取而不会阻塞的字节数.换句话说,永远不要将返回值视为一致.如果要获取实际长度,则确实需要阅读整个流.