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)
Кто-нибудь имел успех в поставке пользовательских обработчиков контента? Любая помощь высоко ценится, спасибо.