2010-03-11 13 views
14

Bugün bu sorunun çok kötü olduğunu düşündüğüm sorularım var. Akımın akan bir veri olduğunu ve okuyucunun okuduğumuz bir teknik olduğunu ve bunun statik bir veri olduğunu söyledim. Bunun korkunç bir cevap olduğunu biliyorum, bu yüzden lütfen Java ile bu ikisi arasındaki net farkı ve tanımları sağlayın.Java'da bir akış ve bir okuyucu arasındaki fark nedir?

Teşekkürler.

cevap

11

, her biri için kullanım durumları (genellikle birbirinin yerine kullanılabilir olsa bile)

okuyucular karakterleri okumak için olduğundan

girmek ilgileniyor, onlar daha iyi biraz farklıdır Bu metinsel niteliktedir (veya karakter olarak temsil edilen veri). Daha iyi diyorum çünkü Readers (tipik kullanım bağlamında), karakter girişini kolayca kolaylaştıracak yöntemlerle temel olarak akışlardır.

+1

+1, bir Reader genellikle bir tür (genellikle StringReader değil) bir InputStream ile desteklenir ve 16 bit unicode karakterlere bir bayt dönüşümü gerçekleştirilir. . – Yishai

9

Akış, baytları okumak içindir, Reader, karakterleri okumak içindir. Bir karakter, karakter kümesine bağlı olarak bir bayt veya daha fazla sürebilir.

+0

Bir karakter, en az 2 bayt java cinsinden, doğru mu? –

+0

Akıştan okurken, baytlar ve karakterler arasında eşleme kodlama ile verilir. UTF-8 için bir karakter 1 ila 6 bayt arasında olabilir. –

16

Bir InputStream byte-yönelimli. Bir Okuyucu karakter odaklı.

Javadocs, aradaki farkı açıklayan arkadaşınız. Diğerleri söylediler Reader, InputStream

+3

RTFM demeden. –

+0

RTFM'nin genişletilmesi nedir? – bragboy

+3

RTFM == Okunması gerçekten buradaki Manüel – NomeN

5

Akış sınıfları bayt yönelimli sınıflardır, yani tüm InputStream sınıfları (Arabelleğe alınmış ve arabelleğe alınmamış) veri baytının akıştan byte byte değerini ve tüm OutputStream (Buffered ve non-buffered) sınıfları veri baytını akışa bayt ile yazar. . Akış sınıfları, küçük verileriniz olduğunda veya görüntüler gibi ikili dosyalar ile uğraşırken faydalıdır.

Diğer taraftan Reader/Writer karakter tabanlı sınıflardır. Bu sınıflar, bir karakteri anında veya akışa göre okur veya yazar. Bu sınıflar ya java.io.Reader (tüm karakter giriş sınıfları) ya da java.io.Writer (tüm karakter çıktı sınıfları) uzanır. Bu sınıflar, metin dosyası veya başka bir metin akışıyla uğraşırken kullanışlıdır. Bu sınıflar ayrıca Buffered ve Non-Buffered'dur.

İlgili konular