データを読み込むための引数としてInputStreamをとるクラスがあります。Java InputStreamがソケットから来ているかどうか確認してください
public Foo {
private DataInput in;
public Foo(InputStream ism) {
in = new DataInputStream(ism);
}
public byte readByte() throws IOException {
return in.readByte();
}
}
時には、この入力ストリームは例えば、ソケットから来るかもしれない、
ism = new BufferedInputStream(sock.getInputStream());
foo = new Foo(ism);
私の質問は、それはすなわち、入力ストリームがソケットから来ることはFoo内から確認することができ、それはネットワークの、ありますローカルI/OではなくI/O?
socket.getInputStream
以降は、抽象クラスを返します。テストする具体的な入力ストリーム実装がわかりません。
編集:この構造を持つ大きなJavaソフトウェアがあるという動機があります。 Foo
は多くの場所に作成されます。ファイル入力ストリームのある場所とソケット入力ストリームのある場所読み取りがネットワークを介して行われると、ソフトウェアのパフォーマンスが低下する可能性があります。だから私は可能性があるかどうかを確認したいのですが、コードの多くを変更することなく、このソフトウェアの2つのシナリオを区別するためにトレースします。 AspectJを使って、この既存のソフトウェアに大きな混乱を招かないようにするために、トレースを書きます。
いいえ(少なくとも醜いリフレクションベースのソリューションはありません)、これはBufferedInputStreamにラップするためです。しかし、気にする必要はありません。InputStreamはInputStreamです。InputStreamです。あなたは何を達成しようとしていますか? –
いいえ、 'Foo'のインターフェース全体をソケットとは独立していて、ソケットから隔離して書いています。 'Foo'にソケットについて知りたければ、ソケットを与えなければなりません。 – pvg
Fooがローカルファイルの読み込みの代わりにネットワーク読み込みをしているときに区別するために、トレースを行う必要があります。 – Oxdeadbeef