【问题标题】:How do I get an inputstream or a byte array from a class [closed]如何从类中获取输入流或字节数组 [关闭]
【发布时间】:2014-11-17 05:59:46
【问题描述】:
Class<?> c = (Class<?>) entry.getValue();
                String className = c.getName();
                String p = className.replace('.', '/') ;
                String clazz = p.substring(p.lastIndexOf('/') + 1);
                InputStream s = c.getResourceAsStream(clazz);

所以输入流总是为空,我尝试了很多东西,但没有成功

【问题讨论】:

  • 能否为我们展示一下 c 和 clazz 的值?
  • entry 的数据类型是什么?
  • 您需要澄清您的问题。您是否正在尝试获取实例化类的字节?使用类加载器加载的类的字节数? entry 是什么上下文?
  • 好的,这里有更多代码:gist.github.com/MalikDz/f120b45563f9cb360b61
  • 不工作,谁能加我的Skype:malikfootdz

标签: java class byte inputstream


【解决方案1】:

如果要访问该文件,必须添加“.class”:

String clazz = p.substring(p.lastIndexOf('/') + 1) + ".class";

顺便说一句,您不需要在这里将 '.' 替换为 '/'。

更新:(如果正在读取的类与用于加载它的类不在同一个包中)

String clazz = "/" + p + ".class";

【讨论】:

  • 否:他已经在删除包名,这是正确的:当您使用 Class.getResourceAsStream 时,资源名称被理解为相对于类的包。
  • @ThomasStets 从 Foo 类中获取资源 Foo.class 将在与 Foo 相同的包中搜索文件 Foo.class,这就是上面的代码所做的。
  • 不工作,该类不是来自内部包
  • 在这种情况下,保留包(带有'/')并添加另一个'/'添加开头(见更新)。
  • 没有工作:S:S,如果有人可以添加我的Skype:malikfootdz
猜你喜欢
  • 2017-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-13
  • 1970-01-01
  • 2012-02-03
  • 2014-10-28
  • 2021-03-29
相关资源
最近更新 更多