Seit Java SE 7 gibt es nützlichere Klassen und weniger direkten Kontakt zu java.io [] -Klassen. Als ich InputStream [] neulich zum ersten Mal seit einiger Zeit live verwendet habe, habe ich gegoogelt, weil ich nicht wusste, wie ich es verwenden soll, also habe ich ein Diagramm erstellt.
Es gibt viele Klassen, die ich nicht verwendet habe. Wenn Sie also eine Geschichte haben, die Sie tatsächlich so verwenden können, kommentieren Sie dies bitte.
Es wurde wie folgt. Dies dient jedoch der Klarheit und ist nicht genau. Der Grund wird später beschrieben.
Aus verschiedenen Gründen wage ich es, es ungenau zu machen.
Die folgenden Klassen sind ausgeschlossen.
Diese beiden wurden ausgeschlossen, da sie aufgrund eines Konstruktionsfehlers veraltet waren.
Diese Klasse geht von einer falschen Wahrnehmung aus, dass Zeichen ordnungsgemäß durch Bytes dargestellt werden.
Die Konvertierung von Zeichen in Byte wird in dieser Klasse nicht korrekt durchgeführt.
Diese beiden sind ausgeschlossen, da sie niemals alleine verwendet werden. Ich habe mich gefragt, warum ich es nicht abstrakt gestaltet habe, aber es scheint, dass es andere Menschen gibt, die die gleiche Frage haben.
java - Why FilterInputStream is not Abstract Class - Stack Overflow
Ich glaube nicht, dass ich diesen FilterOutputStream [] überhaupt brauche.
Ich habe diese ausgeschlossen, weil ich keine gute Position gefunden habe. Vielleicht sollte das Rohr eine separate Figur sein.
Ich habe SequenceInputStream [] nicht verwendet, aber es ist eine spezielle Klasse, die InputStream [] verkettet. Selbst wenn ich es in die Abbildung setze, frage ich mich, ob es in der Ecke einsam sein wird.
Beispielsweise erben DataInputStream [], ObjectInputStream [] von InputStream [], lassen es jedoch weg. DataOutputStream [], ObjectOutputStream [] erbt von OutputStream [], lässt es jedoch weg.
Der Grund dafür ist, dass diese zum Lesen und Schreiben primitiver Typen bzw. Objekte verwendet werden und es anscheinend keine andere Szene gibt, die sie als InputStream übergibt.
Wenn dies beispielsweise PushbackInputStream [] ist, sollte es als "Lesen Sie die ersten paar Bytes, um das Dateiformat automatisch zu bestimmen, und lesen Sie dann den Inhalt als InputStream []" verwendet werden.
Außerdem erbt ObjectInputStream [] direkt InputStream [], aber ich denke, es ist auch schwer zu verstehen, dass DataInputStream [] FilterInputStream [] dazwischen hat. Es scheint, dass es andere Menschen gibt, die ähnliche Fragen haben.
Diese haben alle die Namenskonventionen "XXXInputStream", "XXXOutputStream", "XXXReader", "XXXWriter". Daher ist es schwierig zu unterscheiden und es ist eine Quelle der Verwirrung.
Für die drei Klassen mit farbigem Hintergrund in der Abbildung ist der Umgang mit der Codierung subtil.
FileReader [], FileWriter [] haben keinen Konstruktor zum Angeben der Codierung. Also habe ich es in die Abbildung eingefügt, aber Sie sollten es ignorieren. Es wird gesagt, dass FileReader [] langsam ist, und jetzt gibt es [Files # newBufferedReader] [].
PrintStream [] hat PrintWriter [], daher bin ich mir nicht sicher, wie ich damit umgehen soll.
Die PrintWriter-Klasse wird in Situationen verwendet, in denen Zeichen anstelle von Bytes geschrieben werden müssen.
Es heißt, aber ich frage mich, ob es nur für System.out [] und System.err [] übrig bleibt.
Bei Betrachtung der Figur war es überraschend einfach (´ω`)
Außerdem dachte ich, es würde einige Zeit dauern, den Link zu setzen (´ ・ ω ・ `)
Recommended Posts