0

我试图通过扩展 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 和数字一切都出来了。一个重要的注意事项是,我使用我的 CustomURLStreamHandler 和 CustomURLConnection 将我的主要方法更改为......

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

...在 CustomURLStreamHandlerFactory 中,当协议为“文件”时,我使用我的 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)

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

4

0 回答 0