JavaのnewtorkでJPGイメージを受信するサーバーを作成しようとしています。ImageIOはいつInputStreamから読み込みを停止する必要がありますか?
isr = socket.getInputStream();
BufferedImage img = ImageIO.read(isr);
私は読書を終了したいが、ソケット接続を維持したい。 ImageIOは、接続を閉じるときにのみ停止します。同じ画像を2回送信すると停止します。
JavaのnewtorkでJPGイメージを受信するサーバーを作成しようとしています。ImageIOはいつInputStreamから読み込みを停止する必要がありますか?
isr = socket.getInputStream();
BufferedImage img = ImageIO.read(isr);
私は読書を終了したいが、ソケット接続を維持したい。 ImageIOは、接続を閉じるときにのみ停止します。同じ画像を2回送信すると停止します。
ImageIO.readは入力ストリームからファイル全体が読み込まれるまで読み込みを継続する必要があります。その時点で読み込みは停止します。次に、入力ストリーム上でcloseを呼び出すのは、呼び出し元の責任です。
読み取りが完了したことを伝えるために、クライアントからサーバーにデータを送信しません。接続を閉じるだけです。
サーバーが同じイメージを2回送信するか、2つの異なるイメージを送信する場合は、2つのソケット接続を行うか、データを読み取るために他の方法を使用する必要があります。私の知る限りでは、ImageIO.readが2つの画像を読み取る方法はありません。
間違っています。 ImageIOは、画像を読み込むためのInputStreamを作成します。これは、キャッシュなどを管理し、inputStreamを閉じます。呼び出し元は入力ストリームを閉じることができません。 – llappall
@llappall私はImageIO.read(InputStream)について言及しています。これは、OPが質問で参照している関数です。 InputStreamは作成されません。パラメータとして渡されます。また、Javaのドキュメントから引用すると、このメソッドは、読み込み操作が完了した後に提供されたInputStreamを閉じず、必要に応じてストリームを閉じるのは呼び出し元の責任です。おそらくあなたはImageIO.read(URL)を考えています。私は関数名のオーバーロードされたバージョンのどれを参照するべきかを明確にすべきだと思いますが、答えを理解するために質問を読む必要があることがあります。 – Jay
ああ、ImageIO.read(URL)がこの場合にはうまくいかないという疑問から出てきます。彼は始めるURLがありません。彼はソケットを持っています。彼はどこにソケットが質問に指定されていない得る。 – Jay
質問を再入力してください。私は問題を理解していません – Adrian
私は接続を維持したいと思います。 –