Question

Printwriter public (OutputStream Out, Boolean AutofLush):

out - An output stream
autoFlush - A boolean; if true, the println, printf, or format methods
will flush the output buffer

Public PrintStream (OutputStream Out, Boolean AutofLush):

out - The output stream to which values and objects will be printed 
autoFlush - A boolean; if true, the output buffer will be flushed 
whenever a byte array is written, one of the println methods is invoked, 
or a newline character or byte ('\n') is written

Quelle était la raison de la modification de la logique automatique entre ces classes?

Parce qu'ils sont toujours considérés comme identiques, sauf pour les moments de codage et "automatiquement" sans rincer print() ne correspond guère au principe du moindre étonnement, des insectes idiots se produisent:
J'ai créé un imprimeur avec AutofLush sur; Pourquoi n'est-ce pas automatiquement?

Était-ce utile?

La solution

Je pense que la réponse réside dans l'histoire de Java. Le trio InputStream, OutputStream et PrintStream dans java.io Date de retour à Java 1.0. C'est avant le soutien sérieux des encodages de fichiers et les ensembles de caractères ont été intégrés dans la langue.

Pour citer le javadoc:

"Un PrintStream ajoute des fonctionnalités à un autre flux de sortie, à savoir la possibilité d'imprimer des représentations de diverses valeurs de données. Flag qui peut être testé via la méthode Checkerror ... "

Pour résumer, il s'agit d'une commodité pour générer une sortie textuelle, greffée au-dessus de l'OI inférieur.

Dans Java 1.1, Reader, Writer et PrintWriter ont été présenté. Ceux-ci prennent en charge les ensembles de caractères. Alors que InputStream et OutputStream avait encore une réelle utilisation (traitement des données brutes), PrintStream est devenu beaucoup moins pertinent, car l'impression par nature concerne le texte.

Le javadoc pour PrintWriter déclare explicitement:

Contrairement à la classe PrintStream, si le rinçage automatique est activé, il ne sera effectué que lorsque l'une des méthodes println () est invoquée, plutôt que chaque fois qu'un caractère Newline est sorti. Les méthodes println () utilisent la propre notion de séparateur de ligne de la plate-forme plutôt que le caractère Newline.

Autrement dit, les imprimés ne doivent être utilisés que par le biais du print*(...) Les API, car la rédaction de caractères de Newline, etc. ne doit pas être la responsabilité de l'appelant, de la même manière que les encodages de fichiers et les ensembles de caractères ne sont pas la responsabilité de l'appelant.

Je dirais que PrintWriter aurait du être java.io.Printer au lieu de cela, et ne pas avoir étendu Writer. Je ne sais pas s'ils se sont étendus pour imiter PrintStream, ou parce qu'ils étaient coincés sur le maintien de l'idiome de conception de tuyaux.

Autres conseils

La raison pour laquelle ce n'était pas la même chose au début était probablement juste un accident. Maintenant, c'est une compatibilité en arrière.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top