2009-07-06 10 views
11

Je suis désolé s'il s'agit d'un doublon, mais je n'ai pas été en mesure de trouver une réponse définitive à ce qui est la meilleure pratique pour chaque type.Tamponné vs non tamponné, lequel utiliser?

Je voudrais savoir quelles sont les conditions appropriées qui définissent quand utiliser BufferedReader vs FileReader ou BufferedInput/OutputStream vs FileInput/OutputStream? Existe-t-il une formule qui vous dira toujours ce qui est approprié?

Dois-je toujours utilisé tamponné?

Merci

+0

Qu'entendez-vous par "définitif"? –

+0

S.Lott: Je pense qu'il cherche juste quand vous devriez utiliser chacun d'eux. –

+0

Je suppose définitif == quelle est la meilleure pratique pour chaque type – stackMe

Répondre

13

Utilisez un tampon si le flux va avoir beaucoup de petits accès. Utilisez unbuffered si vous allez avoir relativement peu d'accès relativement grands.

3

La seule fois où vous devez utiliser des E/S non tamponnées est lorsque le délai et l'agrégation imposés par la mise en mémoire tampon sont inappropriés à votre application.

+0

Que se passe-t-il lorsque vous tamponnez des choses entre un InputStream et un OutputStream (ou vice versa) avec un 'byte []'. Souhaitez-vous envelopper un tampon * autour d'elle? – Xailor

+0

Ne change rien. – chaos

2

"Existe-t-il une formule qui vous dira toujours ce qui est approprié?"

Si c'était le cas, il serait déjà dans les bibliothèques et ne serait pas une décision de conception que vous auriez à faire.

Comme il n'y a pas de réponse rapide, vous devez prendre la décision de conception, vous devez y penser.

Ou, vous pouvez essayer les deux options et voir ce qui est «mieux» en fonction de votre problème unique et de vos critères uniques.

La plupart des bibliothèques d'E/S standard sont mises en mémoire tampon. C'est un indice que la plupart des E/S bénéficient de la mise en mémoire tampon. Mais pas tout. Les jeux, par exemple, nécessitent un accès sans tampon aux contrôles du jeu.

1

Gardez à l'esprit également que le BufferedReader vous fournit une méthode de commodité readLine() qui vous permet de lire votre contenu une ligne à la fois.

0

Je suggère que vous utilisiez Buffered * si cela rend votre application plus rapide, sinon je ne m'en soucierais pas. c'est-à-dire l'essayer avec des données réalistes pour voir si cela aide.