InputStreamの形になっているサンプルを作成しようとしていますSocketInputStream。サポートされていませreset()んmark()。この入力ストリームを処理すると、eof に到達して閉じられるため、他の操作のために再度処理できます。このプロセスを使用したいのと同じように、InputStreamと を許可reset()していmarkSupported()ます。
InputStreamこのような状況で、私はどのように対処できますか。
明らかに、デフォルトではandSocketInputStreamはサポートされていません。ネットワーク ストリームは、位置を変更できるものではありません。ストリームが元に戻らないように、既に読み取られたバイトを格納しているものは何もありません。mark()reset()
つまり、その機能を拡張SocketInputStreamして提供することができます。メソッドをオーバーライドして、または他の実行中のSocketInputStream.read(byte b[], int off, int length)に情報を保存する必要があります。マークの位置が変更されるたびに、内部配列の最後にいる場合は、発行された a のみから読み取る必要があります。ByteArrayOutputStreambyte[]byte[]super.read(...)
ただし、正しく理解するのはかなりの作業であり、ここでのメモリには非常に注意する必要があります。