2009-07-02 7 views
0

Espérons que c'est une question rapide et facile à propos de BufferedOutputStreams et DataOutputStreams dans java.réseau Java i/o blocage ou non?

Quand j'écris octets dans le flux de sortie comme

myBufferedOutputStream.write(array); 
myDataOutputStream.write(array); 

-ce que ces méthodes les écrire instantanément au courant et le retour ou ils bloquent jamais?

Je n'ai rien vu dans les docs java de base, mais peut-être que ma question n'a pas de sens parce que les écritures ne bloquent jamais?

Quelqu'un s'il vous plaît me mettre en ligne droite.

Merci, JBU

Répondre

0

Je crois que cela dépend de la mise en œuvre. Si vous utilisez quelque chose comme BufferedOutputStream, un appel à write() ne sera probablement pas "bloqué" puisque la classe fournit un tampon pour les performances. Toutefois, si vous utilisez FileOutputStream, l'appel d'écriture peut être bloqué en fonction du niveau d'occupation/disponibilité des ressources d'E/S sur le système, car un appel à write() peut déclencher une opération d'E/S à ce moment, ce qui prend temps de terminer.

1

Toutes les méthodes de lecture et d'écriture de java.io.* ont le potentiel de bloquer. Aucune ne prend en charge les E/S asynchrones. Pour la lecture, il doit être mis en œuvre manuellement en utilisant .available() ou un mécanisme similaire. Pour l'écriture, eh bien, vous êtes seul.

1

L'API du package java.io. * est susceptible de se bloquer. Cependant, il existe une API spéciale appelée Java NIO (nouvelle E/S ou E/S non bloquante) que vous devez utiliser pour les E/S asynchrones.

Regardez le paquet java.nio * Vous trouverez ici quelques exemples:. Non, il ne « dépend: le meilleur, mais il était viciée en commençant avec la désinformation http://en.wikipedia.org/wiki/New_I/O

2

La réponse de Pierre était la mise en oeuvre". Tout le but de la mise en mémoire tampon est d'adoucir l'impact du blocage, mais lorsque le tampon est plein et que le matériel de sortie n'est pas prêt, write() va bloquer. Mais puisqu'il est tamponné, il bloquera beaucoup moins souvent et avec un impact beaucoup moins important sur le débit qu'un OutputStream à la vanille ordinaire. La mise en mémoire tampon est un moyen rapide et facile d'améliorer considérablement les performances.