J'ai une classe qui prend un InputStream comme argument pour lire des données.Vérifiez si Java InputStream provient de Socket
public Foo {
private DataInput in;
public Foo(InputStream ism) {
in = new DataInputStream(ism);
}
public byte readByte() throws IOException {
return in.readByte();
}
}
Parfois, ce InputStream peut venir d'une prise, par exemple,
ism = new BufferedInputStream(sock.getInputStream());
foo = new Foo(ism);
Ma question est, est-il possible de vérifier à partir de Foo que le flux d'entrée provient de la prise, par exemple, il est un réseau E/S plutôt que E/S locales? Puisque le
socket.getInputStream
appelle la classe abstraite. Je ne sais pas quelle implémentation de flux d'entrée concrète tester. Edit: la motivation est qu'il existe un gros logiciel Java qui a cette structure. Foo
est créé dans de nombreux endroits. Certains endroits avec un flux d'entrée de fichier tandis que d'autres avec un flux d'entrée de socket. Le logiciel peut mal fonctionner lorsque la lecture se fait sur le réseau. Donc, je veux voir s'il est possible de faire du traçage pour différencier les deux scénarios pour ce logiciel sans changer une grande partie de son code. J'utilise AspectJ pour écrire le calque dans l'espoir de ne pas créer beaucoup de désordre à ce logiciel existant.
Non (du moins pas sans une solution à base de réflexion moche), puisque vous l'enveloppez dans un BufferedInputStream. Mais vous ne devriez pas avoir à faire attention: un InputStream est un InputStream. Qu'essayez-vous d'accomplir? –
Non, vous avez écrit toute l'interface de 'Foo' pour être indépendant et isolé des sockets. Si vous voulez que 'Foo' connaisse les sockets, vous devrez lui donner un socket. – pvg
J'ai besoin de faire un peu de traçage pour différencier quand Foo fait la lecture de réseau au lieu de lire le fichier local. – Oxdeadbeef