2010-12-06 61 views
63

Was ist der Unterschied zwischen Reader und InputStream? Und wann was zu verwenden? Wenn ich Reader zum Lesen von Zeichen verwenden kann, warum ich Inputstream verwenden werde, schätze ich Objekte zu lesen?Was ist der Unterschied zwischen Reader und InputStream?

+1

In Bezug auf "Ich denke, Objekte zu lesen?" Gibt es spezielle Eingabe/Ausgabe-Streams zum Lesen/Schreiben von Java-Objekten. Sie sind ObjectInputStream bzw. ObjectOutputStream und Teil des größeren Serialisierungsframeworks. http://java.sun.com/developer/technicalArticles/Programming/serialization/ Aber das ist nur eine Verwendung von Eingabe/Ausgabe-Streams, andere könnten Daten über einen Socket usw. senden. –

Antwort

93

Ein InputStream ist die Rohmethode zum Abrufen von Informationen von einer Ressource. Es ergreift die Daten Byte für Byte, ohne irgendeine Art von Übersetzung durchzuführen. Wenn Sie Bilddaten oder eine Binärdatei lesen, ist dies der zu verwendende Stream.

Ein Reader ist für Zeichenströme ausgelegt. Wenn es sich bei den Informationen, die Sie lesen, ausschließlich um Text handelt, kümmert sich der Reader um die Zeichendecodierung für Sie und gibt Ihnen Unicode-Zeichen aus dem rohen Eingabestrom. Wenn Sie einen beliebigen Text lesen, ist dies der zu verwendende Stream.

Sie können einen InputStream mithilfe der InputStreamReader-Klasse in einen Reader umwandeln.

Reader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8); 
1

Man akzeptiert Bytes und der andere akzeptiert Zeichen.

12

InputStreams werden zum Lesen von Bytes aus einem Stream verwendet. Sie sind also nützlich für Binärdaten wie Bilder, Videos und serialisierte Objekte.

Lesegeräte hingegen sind Zeichenströme, so dass sie am besten zum Lesen von Zeichendaten verwendet werden.

+0

Wann '' read() 'Byte zu verwenden by byte und wann 'read (byte [])' Array von Byte zu verwenden. Wie ich denke, lesen Array ist immer besser. Dann kannst du mir ein Beispiel geben, wo man 'read()' byte by byte ODER 'read (byte [])' array byte benutzen kann. ODER 'BufferedInputStream'.? – UnKnown

0

Ich denke, die Quelle der Verwirrung ist, dass InputStream.read() gibt ein int und Reader.read() auch ein int zurückgibt.

Der Unterschied besteht darin, dass InputStream.read() Return-Byte-Werte zwischen 0 und 255 zu dem rohen Inhalt des Byte-Stream entsprechen, und Reader.read() den Zeichenwert zurück, die zwischen 0 und 65.357

Ein InputStream können Sie den Inhalt lesen ist Byte durch B. der Inhalt "a ‡ a" als 97, 226, 128, 161, 97 gelesen, wobei a -> U+0061 -> 0x61 -> 97 und ‡ -> U+2021 -> 0xE280A1 (utf-8 encoding of 0x2021) -> 226 128 161.

A Reader können Sie den Inhalt zeichenweise so der Inhalt "a ‡ a" 97, 8225 gelesen zu lesen, 97, wo a -> U+0061 -> 0x61 -> 97 und ‡ -> U+2021 -> 0x2021 -> 8225.