您的位置:首页 > 文旅 > 美景 > 一个页面多少钱_hao123上网从这里开始_杭州百度快照优化公司_新闻式软文范例

一个页面多少钱_hao123上网从这里开始_杭州百度快照优化公司_新闻式软文范例

2025/2/6 0:16:13 来源:https://blog.csdn.net/colorknight/article/details/144062942  浏览:    关键词:一个页面多少钱_hao123上网从这里开始_杭州百度快照优化公司_新闻式软文范例
一个页面多少钱_hao123上网从这里开始_杭州百度快照优化公司_新闻式软文范例

        当我们用Java语言编写插件容器时,需要动态加载与卸载jar包插件。如果jar包插件中的类存在读取Jar包内打包的资源文件的情况。那么当你升级Jar包插件并再次装载插件时,可能会碰到读取jar包内文件的代码处抛出“java.util.zip.ZipException: invalid distance too far back”异常的情况。

        该问题是因为Jar包内的资源文件在被访问后,会被保存在装载插件的类装载器中。若此时升级jar包,再次进行插件装载时,会引发文章中的异常。那么,一种合适的解决问题的办法就是,我们需要确保两次读取资源文件的类装载器不同就可以。若让插件每次的类装载器都不同,不会影响整个程序,那么可以采用这种方式解决。而本文将给出一种在插件内解决这类问题的方案,这样就可以在更小的影响范围解决以上的问题了。

        在插件内部,我们可以在加载文件之前,构造一个新的类装载器,确保由这个类装载器来装载我们要读取的资源文件。资源文件读取完后,就可以销毁类装载器了。

ClassLoader parentClassLoader = this.getClass().getClassLoader();
// 从父节点找到要读取的资源文件,并解析出文件的url
URL url = parentClassLoader.getResource("xxxx.json");
int index = url.toString().indexOf("!");
String u = url.toString().substring(4, index);
// 以资源文件的url构造类装载球
URLClassLoader classloader = new URLClassLoader(new URL[] { new URL(u) }, parentClassLoader);
// 用新构造的类装载器装载文件
InputStream is = classloader.getResourceAsStream("xxxx.json");
......

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com