繁体   English   中英

有什么办法从字节数组创建一个URL?

[英]Any way to create a URL from a byte array?

有没有办法从字节数组创建URL? 我有一个自定义类加载器,它存储来自存储条目名称及其字节的HashMap中JarInputStream的所有条目。 我想要从字节数组创建一个URL的原因是为了满足ClassLoaders中的getResource(String name)方法。 我已经使用ByteArrayInputStream完成了getResourceAsStream(String name)。

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

class SomeClassLoader {
    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 {
            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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM