Java.net URLConnection.setContentHandlerFactory不起作用?

时间:2014-04-25 17:26:15

标签: java url java-8 urlconnection urlstream

我试图通过扩展URLStreamHandler来解决问题,目的是从内存中提供文件。我有班级......

public class CustomURLStreamHandler extends URLStreamHandler {
    private Handler fileHandler = new Handler();

    @Override
    protected URLConnection openConnection(URL url) throws IOException {
        if (url.toString().contains(".mp4")) {
            return new CustomURLConnection(url);
        }

        return fileHandler.openConnection(url);
    }
}

...这将试图改变MP4的加载方式。例如,假设我有一个非常大的视频文件,为了节省内存,我想在任何给定时间只加载X字节。 CustomURLConnection就在这里......

public class CustomURLConnection extends URLConnection {
    public CustomURLConnection(URL url) {
        super(url);
    }

    @Override
    public void connect() throws IOException {
        // Nothing needed
    }

    @Override
    public synchronized java.io.InputStream getInputStream() throws IOException {
        return new CustomInputStream(this.url)));
    }
}

...但请注意,getInputStream没有执行它的样子。经过大量调查后,似乎URL连接的getInputStream仅用于确定媒体的内容类型。在我的例子中,它只查看前22个字节。如果我将方法更改为...

@Override
public synchronized java.io.InputStream getInputStream() throws IOException {
    try {
        return new ByteInputStream(new byte[] {}, 0);
    }
}

...文件仍将加载...因为此输入流仅用于检测内容类型,如果失败,Java将首先使用未知内容处理程序尝试确定内容类型URL并将所有内容都列出来。一个重要的注意事项是我通过将main方法更改为...来使用CustomURLStreamHandler和CustomURLConnection ...

public static void main(String[] args) {
    URL.setURLStreamHandlerFactory(new CustomURLStreamHandlerFactory());
    launch(args);
}

...并且在CustomURLStreamHandlerFactory中,当协议是" file"时,我使用我的CustomURLStreamHandler。在我看来,最后一个难题是扩展MP4 MIME的内容处理程序。

这就是我的问题,我将主要方法改为......

public static void main(String[] args) {
    URL.setURLStreamHandlerFactory(new CustomURLStreamHandlerFactory());
    URLConnection.setContentHandlerFactory(new CustomContentHandlerFactory());
    launch(args);
}

...我在重写的方法中设置了一个断点" createContentHandler"但它永远不会受到打击。我尝试使用java.net和sun.net.www URLConnection(尽管我99%确定java.net是正确使用的)。我很确定如果我可以挂钩我关心的内容处理程序,我可以让它工作。我的java版本......

java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)

有没有人成功提供自定义内容处理程序?非常感谢任何帮助,谢谢。

0 个答案:

没有答案