看起来 java 正在对 URL(和文件)进行某种缓存。
例如
我的类路径中的 jar 文件中有一个文件“resources.txt”。
该文件的内容是:
“版本1”
new java.io.BufferedReader (new java.io.InputStreamReader( new URL("jar", "", "file:test.jar!/resourcs.txt").openConnection().getInputStream())).readLine()
返回“版本 1”(如预期)
我将文件内容更改为“版本 2”并再次调用此代码。
我仍然得到“版本 1”
我怎样才能清除这个“缓存”。
注意:我发现它只发生在 Linux 上。
因为jar
URL 中使用的协议,连接是一个实例sun.net.www.protocol.jar.JarURLConnection http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/sun/net/www/protocol/jar/JarURLConnection.java它受益于实现的缓存sun.net.www.protocol.jar.JarFileFactory http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/sun/net/www/protocol/jar/JarFileFactory.java
源代码证实了setUseCache(false)
on URLConnection
实施将阻止使用该缓存。
我对 Linux/Windows 行为差异的假设:来自 URLJarFileCloseController 接口的关闭事件通知在 Windows 上触发得更快,因为它不喜欢让文件句柄打开太长时间......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)