有没有办法从字节数组创建URL?我有一个自定义类加载器,它存储来自存储条目名称及其字节的HashMap中JarInputStream的所有条目.我想要从字节数组创建一个URL的原因是为了满足ClassLoaders中的getResource(String name)方法.我已经使用ByteArrayInputStream完成了getResourceAsStream(String name).
解决方法:
假设您使用自定义类加载器,并且希望将内容的字节存储/缓存在散列映射(而不是byte []形式的位置).比你有同样的问题把我带到了这里.但这就是我能够解决这个问题的方法:
class SomeClassLoader {
private final Map entries = new HashMap<>();
public URL getResource(String name) {
try {
return new URL(null, "bytes:///" + name, new BytesHandler());
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
}
class BytesHandler extends URLStreamHandler {
@Override
protected URLConnection openConnection(URL u) throws IOException {
return new ByteUrlConnection(u);
}
}
class ByteUrlConnection extends URLConnection {
public ByteUrlConnection(URL url) {
super(url);
}
@Override
public void connect() throws IOException {
}
@Override
public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(entries.get(this.getURL().getPath().substring(1)));
}
}
}
标签:java,url,bytearray,classloader
来源: https://codeday.me/bug/20190624/1283277.html