您需要为“数据:”添加协议处理程序,以便可以为其打开URL / URLConnection。或者,您可以为类路径资源创建一些协议处理程序“
resource:”。
您需要一个
data带有类的包
Handler(固定名称约定!)。这将是“数据:”的工厂类,返回URLConnection。我们将为此创建DataConnection。
可以通过System.setProperty完成协议处理程序的安装。在这里,我提供了
Handler.install();以一般方式进行的 *** 作。
package test1.data;import java.io.IOException;import java.net.URL;import java.net.URLConnection;import java.net.URLStreamHandler;public class Handler extends URLStreamHandler { @Override protected URLConnection openConnection(URL u) throws IOException { return new DataConnection(u); } public static void install() { String pkgName = Handler.class.getPackage().getName(); String pkg = pkgName.substring(0, pkgName.lastIndexOf('.')); String protocolHandlers = System.getProperty("java.protocol.handler.pkgs", ""); if (!protocolHandlers.contains(pkg)) { if (!protocolHandlers.isEmpty()) { protocolHandlers += "|"; } protocolHandlers += pkg; System.setProperty("java.protocol.handler.pkgs", protocolHandlers); } }}
URLConnection为字节提供InputStream:
package test1.data;import java.io.ByteArrayInputStream;import java.io.IOException;import java.io.InputStream;import java.net.URL;import java.net.URLConnection;import javax.xml.bind.DatatypeConverter;public class DataConnection extends URLConnection { public DataConnection(URL u) { super(u); } @Override public void connect() throws IOException { connected = true; } @Override public InputStream getInputStream() throws IOException { String data = url.toString(); data = data.replaceFirst("^.*;base64,", ""); System.out.println("data: " + data); byte[] bytes = DatatypeConverter.parsebase64Binary(data); return new ByteArrayInputStream(bytes); }}
聪明的地方是
DatatypeConverter在标准Java SE中使用base64解码。
聚苯乙烯
如今人们会使用
base64.getEnprer().enpre(...)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)