メモリからファイルを提供することを目標に 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 を使用してこれを試しました (ただし、java.net を使用する方が正しいと 99% 確信しています)。関心のあるコンテンツ ハンドラーに接続できれば、これを機能させることができると確信しています。私の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)
カスタム コンテンツ ハンドラの提供に成功した人はいますか? どんな助けでも大歓迎です、ありがとう。