was ist der Unterschied in der Verwendung InputStream anstelle von FileInputStream, der beim erstellen der FileInputStream-Objekt
Dies kann eine dumme, aber ich will wissen, hintergrund Betrieb Unterschied.
InputStream is = new FileInputStream(filepath);
FileInputStream is = new FileInputStream(filepath);
Was ist der Unterschied zwischen den oben genannten zwei Zeilen code, und in welchen Szenarien werden Sie verwendet.
InformationsquelleAutor der Frage Mathan Kumar | 2013-07-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
FileInputStream
erstrecktInputStream
: dies ist eine spezialisierte version eines InputStream entwickelt, um Dateien zu Lesen.Gibt es mehrere Implementierungen eines InputStream nach der Verwendung von es.
Ist es in der Regel gute Praxis, verwenden Sie die höchste Art benötigt in Ihrem code. Deshalb, wenn Ihr code braucht zum Lesen von Daten aus einer
InputStream
aber nicht speziell von einemFileInputStream
verwenden, sollten SieInputStream
. Dennoch, wenn Sie brauchen, um die Informationen die Ihr Objekt einFileInputStream
ist und nicht nur eineInputStream
dann sollte man dieFileInputStream
geben.InformationsquelleAutor der Antwort Jean Logeart
Gibt es keinen wirklichen Unterschied.
FileInputStream
erstrecktInputStream
und so ordnen Sie eineInputStream
Objekt einFileInputStream
Objekt. In der end, es ist das gleiche Objekt, so dass die gleichen Vorgänge passieren wird.Dieses Verhalten wird als Polymorphie und ist sehr wichtig in der objektorientierten Programmierung.
Ihre erste Linie der code ist vermutlich wünschenswerter als die zweite, weil Sie es nicht sperren Sie in ein
FileInputStream
.Dies ist eine der stärken der objektorientierten Programmierung. Nicht die Angabe eines Typs können Sie ändern, welche Art von Strom Sie verwenden später. Wenn Sie sicher sind, dass Sie nur jemals müssen einen
FileInputStream
hier, verwenden Sie die zweite Zeile des Codes.InformationsquelleAutor der Antwort William Morrison
Die anderen Antworten haben ziemlich viel nagelte ihn, aber ich möchte hinzufügen das folgende bit.
Wenn der Typ der Referenz-Variablen
is
ist ausschließlich interne Implementierung detail Ihrer Klasse, d.h. keine andere Klasse jemals davon erfahren, direkt oder indirekt, dann gibt es wirklich keinen Unterschied zwischen den beiden Aussagen, auch wenn ich mir das Programm gegen die weitere basic-Typ (InputStream) einfach nur da.Jedoch, wenn auch nur die geringsten Anzeichen von undicht FileInputStream bestimmtes Verhalten durch Ihre Klasse " - Schnittstelle, ohne dass dies unerlässlich ist, um das problem, das Sie lösen möchten, sollten Sie immer das Programm gegen die Basis.
Natürlich, dies ist eine Allgemeine gute Praxis und gilt für mehr als InputStreams und dergleichen.
InformationsquelleAutor der Antwort dkateros
Wie die andere Antwort Stand, gibt es keinen Unterschied im Verhalten. Es ist immer noch das gleiche Objekt und die gleichen Methoden ausgeführt werden. Ordnen Sie ein Objekt beliebigen Typs, das erbt
InputStream
auf diese variable.Jedoch, was niemand bisher genannten ist: man kann Sie nur anrufen Operationen deklariert werden
InputStream
auf diese variable. WennFileInputStream
würde bieten einige zusätzliche Operationen, die der compiler würde einen Fehler auslösen, wenn Sie versuchen, es zu nennen. In diesem Fall müssten SieFileInputStream
als Typ der Variablen.InformationsquelleAutor der Antwort André Stannek
Gibt es keinen Unterschied. In jedem Fall erzeugen Sie eine
FileInputStream
. Die erste ist wahrscheinlich besser Programmieren-Stil, dass Sie sollten in der Regel verwenden Sie eine Klasseninterface
anstelle der konkreten Klasse zu ermöglichen-Flexibilität (ich.e entscheiden Sie sich für eineBufferedInputStream
).InformationsquelleAutor der Antwort John B