Comment faire pour vérifier si un OutputStream est fermé
Est-il de toute façon à vérifier si un OutputStream est fermé, sans chercher à les écrire et de les attraper, les IOException
?
Par exemple, considérez les points suivants artificiel méthode:
public boolean isStreamClosed(OutputStream out){
if( /* stream isn't closed */){
return true;
}else{
return false;
}
}
Ce qui pourrait vous remplacer /* stream isn't closed */
avec?
- Qu'est-ce que le problème sous-jacent que vous devrez résoudre?
- Je soupçonne que l'OP veut éviter d'avoir à traiter avec des exceptions. 😉
- C'est venu de moi la pensée, sur la défensive à propos de ce genre de mauvaise intrants je pourrais recevoir, mais c'est plus une question hypothétique, plus haut de résultats sur google pour "java vérifier si outputstream est fermé" points de stackoverflow.com/questions/2607515/... qui ne semble pas réellement répondre à cette question
Vous devez vous connecter pour publier un commentaire.
Le flux sous-jacent ne pouvez pas le savoir fermée jusqu'à ce que vous essayez d'écrire pour elle (par exemple, si l'autre extrémité d'une prise ferme)
L'approche la plus simple est de l'utiliser et de gérer ce qui se passe si il est fermé alors, plutôt que de le tester d'abord en tant que bien.
Peu importe ce que vous test, il y a toujours de la chance, vous obtiendrez une IOException, de sorte que vous ne pouvez pas éviter le code de gestion des exceptions. L'ajout de ce test est de nature à compliquer le code.
isClosed()
, "Le flux sous-jacent ne pouvez pas le savoir fermée jusqu'à ce que vous essayez d'écrire", d'où accepté, merci 🙂Malheureusement OutputStream API n'a pas de méthode comme
isClosed()
.Donc, je sais que d'une façon claire: créer votre classe
StatusKnowingOutputStream
qui enveloppe toutes les autres flux de sortie et met en œuvre sesclose()
méthode comme suit:Maintenant ajouter une méthode
isClosed()
boolean canIUseTheStream()
méthode.finally
clause, afin de l'avoir fermée lorsqu'une exception se produit.L'OutputStream lui-même ne prend pas en charge cette méthode.
Les Caisses de l'interface est définie de manière que, une fois que vous appeler close() vous allez disposer de OutputStream.
Vous devriez peut-être revoir un peu le design de l'application et vérifier pourquoi vous ne faites pas et que vous êtes de se retrouver avec un fermé OutputStream instance continuent de tourner dans votre application.
Cela n'est possible que pour un FileOutputStream!
Pas. Si vous implémentez votre propre, vous pourriez écrire une isClosed méthode, mais si vous ne connaissez pas la classe de béton, alors non. OutputStream est juste une classe abstraite. Ici, c'est la mise en œuvre:
OutputStream
une classe abstraite, par conséquent, il pourrait fournir quelques-uns de mise en œuvre?par l'aide de l'extérieur.checkError()
trouvé ici: Comment puis-je obtenir java à la sortie lorsque les canalisations à la tête