Printwriter AutofLush Logic perplexe
-
14-11-2019 - |
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?
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.