Java.net URLConnection.setContentHandlerFactory не работает?

Я пытаюсь решить проблему путем расширения 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)

Кто-нибудь имел успех в поставке пользовательских обработчиков контента? Любая помощь высоко ценится, спасибо.

0 ответов

Другие вопросы по тегам