sun.net.www.ParseUtil.decode()与java.net.urldecover.decode()的比较

sun.net.www.ParseUtil.decode()与java.net.urldecover.decode()的比较,java,urldecode,Java,Urldecode,我有一些旧代码正在调用sun.net.www.ParseUtil.decode()。我希望避免调用特定于供应商的函数,因此我希望用其他调用替换该调用 我可以使用java.net.urldecker.decode()作为替代品吗?还是有什么我应该注意的 该调用用于将文件URL转换为自定义类加载器内的正常路径: URL url = //... if(url.getProtocol().equals("file"))) { String path = url.getFile().replace

我有一些旧代码正在调用
sun.net.www.ParseUtil.decode()
。我希望避免调用特定于供应商的函数,因此我希望用其他调用替换该调用

我可以使用java.net.urldecker.decode()作为替代品吗?还是有什么我应该注意的

该调用用于将文件URL转换为自定义类加载器内的正常路径:

URL url = //...
if(url.getProtocol().equals("file"))) {
    String path = url.getFile().replace('/', File.separatorChar);
    path = ParseUtil.decode(path);
    if (path.endsWith(File.separator)){
       path += "-";
    }
    p = new FilePermission(path, SecurityConstants.FILE_READ_ACTION);
 }

(请注意,这几乎与中的代码完全相同)

很难说,因为
ParseUtil
的语义没有很好的文档记录

我认为应该完全抛弃代码,用使用
URI
文件(URI)
构造函数的代码替换它

URL url = //...
if(url.getProtocol().equals("file"))) {
    String path = url.getFile().replace('/', File.separatorChar);
    path = ParseUtil.decode(path);
    if (path.endsWith(File.separator)){
       path += "-";
    }
    p = new FilePermission(path, SecurityConstants.FILE_READ_ACTION);
 }
我怀疑这段代码是否有任何用处。当然,任何执行replace()操作的代码都会立即受到怀疑。尝试新文件(url.toURI()).getPath()或.getAbsolutePath()


下一个问题是,它认为自己在构建许可证时做了什么?这也不会让你有任何进展。安全管理器将在必要时自行执行此操作,并检查生成的权限,必要时抛出SecurityException。自己构造权限不会给您该权限。

绝对!即使不一样,明天太阳也会改变!哎呀!改变它!代码位于自定义类加载器的getPermissions()方法中。我相信这些权限最终会传递给安全管理器,所以我想这是有目的的。此外,我可以看到它几乎是Sun的UrlClassLoader的剪切粘贴(请参阅问题的更新),我想(希望?)Sun知道他们在做什么。@Rasmus Faber OK。重新剪切/粘贴时,Sun知道他们在JDK中所做的工作,代码是从当时存在的版本中名为ParseUtil.decode()的代码复制/复制的。很可能根本没有改变。。。但是,外部代码不应该依赖它。试试我发布的URI代码的一些变体。