Sollte ich DataInputStream BufferedInputStream oder
Will ich Lesen Sie jede Zeile aus einer text-Datei und Speicher diese in eine ArrayList (jede Zeile ist ein Eintrag in der ArrayList).
So weit ich verstehe, dass ein BufferedInputStream schreibt in den Puffer, und nur andere tut gelesen, sobald der Puffer leer ist, minimiert oder zumindest reduziert die Menge der Betriebssystem-Vorgänge.
Bin ich richtig, kann ich den Sinn?
Wenn das oben der Fall ist, in welchen Situationen würde jemand wollen, verwenden Sie DataInputStream. Und schließlich, welche der beiden sollte ich verwenden und warum - oder ist es egal.
Was macht Sie denken, dass Sie austauschbar sind?
InformationsquelleAutor Ankur | 2009-04-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie eine normale
InputStream
(z.B.FileInputStream
) verpackt in einerInputStreamReader
und dann, eingewickelt in einBufferedReader
- dann rufen SiereadLine
auf dieBufferedReader
.DataInputStream
ist gut für das Lesen von primitiven, Länge-Präfix-strings etc.InformationsquelleAutor Jon Skeet
Die zwei Klassen nicht gegenseitig aus - Sie können sowohl von Ihnen, wenn Ihre Bedürfnisse passen.
Als Sie abgeholt, BufferedInputStream ist zu Lesen, die in Blöcken von Daten, anstatt ein einzelnes byte zu einer Zeit. Es bietet auch die Bequemlichkeit Methode readLine(). Es ist jedoch auch für späht auf weitere Daten in den stream, dann ein Rollback zu einem vorherigen Teil des Datenstroms, falls erforderlich (siehe die mark() und reset () - Methoden).
DataInputStream/DataOutputStream bietet convenience-Methoden zum Lesen/schreiben bestimmte Daten-Typen. Zum Beispiel, es hat eine Methode zum schreiben/Lesen UTF-String. Wenn Sie waren, dies selbst zu tun, würden Sie haben zu entscheiden, wie Sie ermitteln, ob das Ende der Zeichenfolge (D. H. mit einem terminator byte oder durch Angabe der Länge der Zeichenfolge).
Diese unterscheidet sich von BufferedInputStream s readLine (), welche, wie die Methode klingt, gibt nur eine einzige Linie. writeUTF()/readUTF() Umgang mit Zeichenketten - string haben kann, wie viele Zeilen es, wie es will.
BufferedInputStream ist geeignet für die meisten text-Bearbeitung haben. Wenn Sie etwas besonderes wie der Versuch, zu serialisieren, die Felder einer Klasse zu einer Datei, die Sie benutzen wollen würde DataInput/Ausgabestrom als es bietet mehr Kontrolle über die Daten auf binärer Ebene.
Hoffe, das hilft.
Uups - ja, du hast Recht!
InformationsquelleAutor Mike
Können Sie immer mit beiden:
DataInputStream
der nicht-Puffer-Eingang,BufferedInputStream
tut (offensichtlich). Durch die VerpackungInputStream
mitBufferedInputStream
, dann wickelnBufferedInputStream
mitDataInputStream
erhalten Sie einen input-stream, dass ist einfacher, mit zu arbeiten (die üblichen MethodenDataInputStream
bietet, sind nützlich) und unterstützt durch eine gepufferte Leser, die I/O-effizienter.InformationsquelleAutor Mike Holler
InputStream: Basisklasse zu Lesen byte aus dem stream (Netzwerk oder Datei ), die Fähigkeit zu Lesen byte aus dem stream und löschen das Ende des Streams.
DataInputStream: Zum Lesen von Daten direkt als primitiver Datentyp.
BufferInputStream: Lesen von Daten aus dem Eingabe-stream und verwenden Sie Puffer um die Geschwindigkeit zu optimieren, um auf die Daten zugreifen.
InformationsquelleAutor mahir chaudhari
Sollte man verwenden DataInputStream in den Fällen, wenn Sie brauchen, um zu interpretieren, die primitiven Typen in eine Datei geschrieben, die von einer anderen Sprache Java in der Plattform-unabhängige Art und Weise.
InformationsquelleAutor Onur
Ich würde es befürworten mit Jakarta-Commons-IO und die readlines() Methode (egal welcher Sorte).
Er werde sich nach Pufferung/schließen etc. und geben Sie zurück eine Liste von Textzeilen. Ich werde gerne roll meine eigene input-stream Verpackung mit Pufferung etc., aber in neun von zehn Fällen die Commons-IO-Zeug funktioniert gut und ist ausreichend/präziser/weniger fehleranfällig etc.
InformationsquelleAutor Brian Agnew