Wat is het verschil tussen Reader en InputStream?

Wat is het verschil tussen Reader en InputStream?
En wanneer wat gebruiken?
Als ik Reader kan gebruiken voor het lezen van karakters, waarom zal ik dan inputstream gebruiken, denk ik om objecten te lezen?


Antwoord 1, autoriteit 100%

Een InputStream is de onbewerkte methode om informatie uit een bron te halen. Het pakt de gegevens byte voor byte zonder enige vorm van vertaling uit te voeren. Als u afbeeldingsgegevens of een willekeurig binair bestand leest, is dit de stream die u moet gebruiken.

Een Reader is ontworpen voor tekenstromen. Als de informatie die u aan het lezen bent alleen maar tekst is, zorgt de Reader voor de karakterdecodering voor u en geeft u Unicode-tekens uit de onbewerkte invoerstroom. Als je eender welk type tekst leest, is dit de stream die je moet gebruiken.

Je kunt een InputStream inpakken en er een Reader van maken door de klasse InputStreamReader te gebruiken.

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

Antwoord 2, autoriteit 12%

InputStreams worden gebruikt om bytes uit een stream te lezen. Ze zijn dus handig voor binaire gegevens zoals afbeeldingen, video en geserialiseerde objecten.

Lezers daarentegen zijn tekenstromen, dus ze kunnen het beste worden gebruikt om tekengegevens te lezen.


Antwoord 3, autoriteit 9%

Ik denk dat de bron van verwarring is dat InputStream.read()retourneert een inten Reader.read()retourneert ook een int.

Het verschil is dat InputStream.read()bytewaarden tussen 0 en 255 retourneert die overeenkomen met de onbewerkte inhoud van de bytestroom en Reader.read()de tekenwaarde die tussen 0 en 65357 ligt (omdat er 65358 verschillende Unicode-codepunten zijn)

Een Inputstreamlaat je de inhoud byte voor byte lezen, bijvoorbeeld de inhoud “a‡a” heeft 3 karakters maar is gecodeerd op 5 bytes in UTF-8. Dus met Inputstreamkun je het lezen als een stroom van 5 bytes (elk weergegeven als een inttussen 0 en 255) wat resulteert in 97, 226, 128, 161en 97waar

a -> U+0061 -> 0x61 (hex) -> 97 (dec)
‡ -> U+2021 -> 0xE280A1 (utf-8 encoding of 0x2021) -> 226 128 161 (1 int per byte)
a -> U+0061 -> 0x61 (hex) -> 97 (dec)

Met een Readerkunt u de inhoud teken voor teken lezen, zodat de inhoud “a‡a” wordt gelezen als 3 tekens 97, 8225en 97waar

a -> U+0061 -> 0x61 -> 97
‡ -> U+2021 -> 0x2021 -> 8225 (single int, not 3)
a -> U+0061 -> 0x61 -> 97

Het teken ‡ wordt U+2021 in Unicode


Antwoord 4

De ene accepteert bytes en de andere accepteert tekens.


Antwoord 5

InputStream accept byte,Reader accept character, In Java, one character = two bytes , en Reader use buffer,InputStream not use. Alle bestanden worden op schijf opgeslagen of overgedragen op byte, inclusief afbeelding en video, maar karakter is in het geheugen, dus InputStream wordt vaak gebruikt.

Other episodes