任何方式从字节数组创建一个URL?

有什么办法从字节数组创建一个URL? 我有一个自定义的类加载器,它将所有来自JarInputStream的条目存储在一个HashMap中,这些HashMap存储了条目名和字节。 我期望从字节数组创建URL的原因是为了满足ClassLoaders中的getResource(String name)方法。 我已经通过使用ByteArrayInputStream完成了getResourceAsStream(String name)。


假设您使用自定义类加载器,并且希望将内容的字节存储/缓存在散列映射中(而不是byte []形式的位置)。 比你有同样的问题把我带到这里。 但这是我能够解决这个问题的方法:

class Somelassloader {
    private final Map<String, byte[]> 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 {
            System.out.println(this.getURL().getPath().substring(1));
            return new ByteArrayInputStream(entries.get(this.getURL().getPath().substring(1)));
        }
    }
}

java.net.URL doc:其中一个构造函数是URL(String spec)

然后java.lang.String doc:其中一个构造函数是String(byte[] bytes)

用你的byte数组创建一个String ,然后使用创建的String来创建URL

String urlString = new String(yourByteArray);
URL yourUrl = new URL(urlString);
链接地址: http://www.djcxy.com/p/58273.html

上一篇: Any way to create a URL from a byte array?

下一篇: What's the difference between ClassLoader.load(name) and Class.forName(name)