2 votes

Y a-t-il une raison de ne pas envelopper InputStreamReader avec BufferedReader ?

J'ai le code suivant pour lire à partir d'un CSV :

InputStream inp = getClass().getResourceAsStream(filename);
InputStreamReader r = new InputStreamReader(inp);
BufferedReader reader = new BufferedReader(r);

Sur les réponses aux questions : Lecteur tampon de Java , Convertir un InputStream en BufferedReader , Quelle est la différence entre les classes BufferedReader et InputStreamReader de Java ?

BufferedReader [BR] et InputStreamReader [ISR] implémentent tous deux les mêmes interfaces. BR possède toutes les méthodes que ISR possède avec les méthodes supplémentaires incluant la toujours si utile méthode readLine() et la moins utile mais toujours pertinente méthode skip(). Vous n'avez pas nécessairement besoin de BR pour lire des caractères uniques, bien que BR puisse faire la même chose plus efficacement que ISR à cet égard. La seule différence significative est que FileReader est une sous-classe de ISR mais pas de BR, bien que j'ai eu des sources sur ce site web disant que FileReader n'est plus vraiment utilisé en raison des alternatives.

D'après mes recherches, tout ce que l'ISR peut faire est mieux fait par le BR. Je suis un jeune développeur, donc chaque classe définie ou importée me semble pertinente. Ce que j'essaie de comprendre, c'est si certaines classes ne sont plus utilisées, de nouvelles versions ou de nouveaux frameworks les remplaçant. Je veux savoir ce que les développeurs plus expérimentés ont à dire. Alors, y a-t-il une raison de ne pas utiliser le BR lorsqu'on utilise l'ISR ?

Liens rapides vers l'API :
BufferedReader
InputStreamReader


3voto

tsolakp Points 4658

Je vois une certaine confusion dans votre message au sujet de l'ISR et du BR.

1) Vous dites que

Mes recherches montrent que tout ce que les RSI peuvent faire est mieux fait par les RE.

Mais regardons la JavaDoc pour chacun d'entre eux :

ISR

public class InputStreamReader extends Reader

Un InputStreamReader est un pont entre les flux d'octets et les flux de caractères. caractères :

BR

Lit le texte à partir d'un flux d'entrée de caractères, en mettant en mémoire tampon les caractères de façon à ce que afin de permettre une lecture efficace des caractères, des tableaux et des lignes.

Comme vous pouvez le constater ISR convertit les octets en caractères. BR d'autre part, a besoin de personnages. C'est pourquoi le BR doit utiliser l'ISR pour lire à partir de InputStream .

2) Pour ce qui est de la question initiale, pourquoi ne pas simplement utiliser les ISR ? C'est tout à fait possible, mais pour gagner en performance, il faut utiliser le BR. Vous pouvez vous demander pourquoi ISR n'a pas été implémenté en utilisant la mise en mémoire tampon ? Parce que ISR est conçu pour faire une seule bonne chose, à savoir lire et convertir des octets en caractères. La partie mise en mémoire tampon est déplacée dans la classe décoratrice qu'est BR. Ceci est fait afin de pouvoir ajouter des capacités de mise en mémoire tampon à n'importe quel lecteur et pas seulement à ISR.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X