2012-10-18 11 views
11

ja jechałem przez niektóre dokumentacji na Java IO i po prostu chciałem się upewnić, czy mogę dostać tego prawa:buforowane i niebuforowane Strumienie w Javie

Unbuffered strumienie wejściowe: FileInputStream, InputStreamReader, FileReader

Unbuffered Wyjście Strumienie: FileOutputStream, OutputStreamWriter, FileWriter

buforowane wyjście Strumienie: PrintStream, PrintWriter

Ponadto mamy strumienie BufferedInputStream, BufferedOutputStream, BufferedReader i BufferedWriter do konwersji niebuforowanych strumieni do wersji buforowanych.

Wreszcie zauważyłem, że dla strumieni znaków, a mianowicie. InputStreamReader, FileReader, OutputStreamWriter, FileWriter, wewnętrzny bajtowy bufor są przechowywane dla bajtów, zanim zostaną wysłane do strumienia. Ten bufor bajtowy nie jest pod naszą kontrolą. Dlatego w przypadku strumieni znaków, buforowanie odnosi się do bufora znaków wysokiego poziomu do przechowywania znaków wchodzących i wychodzących z programu.

Czy wszystko, co powiedziałem, jest poprawne?

P.S. - Rozumiem, że to buforowanie problem jest nieco zależna od implementacji, ale po prostu chcą, aby potwierdzić to, co Javadocs mówią

+3

Brzmi mniej więcej tak, ale powinieneś polegać na tym, co mówi Javadoc, a nie na tym, co mówią inni. Wdrożenia są zobowiązane do robienia tego, co mówią w Javadoc. Pominięto 'ObjectOutputStream,' który zarówno jest i nie jest buforowany, w zależności od tego, co dokładnie robi. Pominięto także strumienie Filtra i czytniki. – EJP

+0

Jeszcze nie posunąłem się;) – Chatterjee

+0

Podoba mi się to pytanie. Nie ma problemu do rozwiązania, po prostu szukając zrozumienia. To jest odświeżające. –

Odpowiedz

1

reguły kciuka:

  1. Wszelkie InputStream/Reader, który odczytuje się bezpośrednio z zewnętrznego źródła (FileInputStream, SocketInputStream, itp.) Jest "surowy" i uważany za niebuforowany. (Chociaż w rzeczywistości prawdopodobnie trwa buforowanie, zależy od implementacji)

  2. Każdy "surowy" InputStream lub Reader może być buforowany przez BufferedInputStream lub BufferedReader.

  3. Takie same założenia dla OuputStreams/Writers.

  4. Inne konstruktory strumieni (np. GZIPInputStream, MD5InputStream, YourSpecialObjectWriter) prawdopodobnie wykonują pewne buforowanie, ale nie jest to bardzo szkodliwe dla buforowania źródła.