Écrit à la console du Système.et PrintWriter
Lors de la lecture sur Java I/O, j'ai réalisé qu'il y a deux façons, à travers lequel je peux écrire sur la sortie standard.
Qui suit est l'extrait de code qui utilise à la fois les techniques
import java.io.*;
public class ConsoleIO {
public static void main(String[] args) {
System.out.println("Method 1");
PrintWriter writer = new PrintWriter(System.out);
writer.println("Method 2");
writer.flush();
writer.close();
}
}
Existe-il des avantages de performance de l'aide de l'un sur l'autre?
- fait est que peu importe la technique que vous utilisez, l'écriture de la console est toujours le plus cher.
- J'étais curieux de connaître frewper l'affirmation que l'écriture sur la console est cher. Je l'ai remarqué moi-même, mais se demande pourquoi. La position courte est I/O tampon. Pour une plus longue (Python-centric) discussion découvrez Piët Delport de réponse sur ce thread: stackoverflow.com/questions/3857052/...
Vous devez vous connecter pour publier un commentaire.
Un rapide Google a révélé un thread sur Coderanch qui a été utile.
Il y a plusieurs autres façons de faire de la console de l'écriture, mais il semble y avoir aucun avantage réel de l'utilisation de l'un ou de l'autre en dehors de moins de code à écrire, et que la création d'un nouvel objet PrintWriter prendra plus de mémoire (éventuellement).
PrintWriter pouvez écrire à d'autres sources que juste la console, il peut écrire à un HttpResponse par exemple, tandis que le Système.out.println écrit uniquement à la console.
différentes des deux approche est la suivante:
System.out.print("")
vous avez réellement utilisé unPrintStream
instance.En fait la différence est dans les deux classes
PrintStream
etPrintWriter
qui sont:PrintStream
est un flux d'octets alors quePrintWrite
est un flux de caractères.PrintStream
utilise la plate-forme de l'encodage par défaut alors qu'avec lePrintWriter
cependant, vous pouvez transmettre un OutputStreamWriter avec un codage spécifique.pour l'échantillon:
PrintStream stream = new PrintStream(output);
PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, "UTF-8"));
Vous pouvez sélectionner une approche avec vos exigences.
Il n'y a que deux manières, vous pouvez également trouver d'autres façons de le faire. Par exemple à l'aide de Consol classe de io paquet, et peut de plus les classes présentes pour cette.
Mais si vous voulez juste pour imprimer quelque chose dans la console, puis je pense que la première méthode est la meilleure. Pourquoi devriez-vous aller de 4 à 5 lignes de code si cela peut être fait en seulement 1 ligne.
Utilisation:
C'est un appel statique qui est plus rapide que l'autre option. De Plus, vous n'avez pas créer n'importe quel objet supplémentaire comme PrinterWriter objet dans la seconde option.
En fonction de la façon dont beaucoup d'I/O que vous allez effectuer, il peut y avoir beaucoup d'avantages à l'aide d'un tampon. Idéalement, il est conseillé de limiter le nombre d'appels à votre source d'entrée, et de lire les octets sous forme de segments.
Imaginer un seau avec de 10 cailloux, et que vous souhaitez les déplacer vers un autre seau. Vous pourriez attraper une poignée de cailloux et simplement les déplacer. Vous n'avez pas besoin d'aller chercher une pelle, c'est beaucoup de frais généraux. Mais si le seau a des milliers de cailloux, vous allez vouloir une pelle, et il vaut la peine de l'effort pour obtenir la pelle (dans cette analogie, le tampon est à la pelle)... La morale de l'histoire est que vous devez utiliser une mémoire tampon lorsque vous allez faire beaucoup d'appels à la source de données.
Cet article explique peut-être cela meilleur, et plus en détail... http://pzemtsov.github.io/2015/01/19/on-the-benefits-of-stream-buffering-in-Java.html
Voici un lien vers l'Oracle du site web expliquant comment la classe PrintWriter œuvres. https://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html
Voici un exemple de travail... Vous pouvez utiliser la classe PrintWriter écrire dans la console si vous instancier l'objet avec le Système.dans. Assurez-vous également de passer en "vrai", de sorte qu'il sera auto-flush.
Voici le résultat:
À l'aide de PrintWriter rend la sortie internationalizable - parce que les encodages comme de l'UTF-8 peut être spécifié. Les deux PrintWriter et PrintStream classes doit être utilisé uniquement pour des activités comme la sortie de la console - pas pour la programmation réseau - en raison de leur dépend de la plateforme de traitement des sauts de lignes et d'avaler les conditions d'exception. Le deuxième chapitre de "Java Programmation Réseau" a une bonne discussion sur ce point.