2012-10-18 49 views
11

Tôi đã đi qua một số tài liệu về Java IO và chỉ muốn chắc chắn rằng liệu tôi có được quyền này:Buffered và Unbuffered Streams trong Java

Unbuffered Input Streams: FileInputStream, InputStreamReader, FileReader

Output Unbuffered Streams: FileOutputStream, OutputStreamWriter, FileWriter

đệm Output Streams: PrintStream, PrintWriter

Ngoài ra, chúng tôi có các luồng BufferedInputStream, BufferedOutputStream, BufferedReader và BufferedWriter để chuyển đổi các luồng không được lọc thành các phiên bản đệm.

Cuối cùng, tôi quan sát thấy đối với Luồng ký tự, viz. InputStreamReader, FileReader, OutputStreamWriter, FileWriter, một bộ đệm byte bên trong được duy trì cho các byte trước khi chúng được gửi vào luồng. Bộ đệm byte này không nằm dưới sự kiểm soát của chúng ta. Do đó, đối với các luồng ký tự, bộ đệm đề cập đến bộ đệm ký tự cấp cao để lưu trữ các ký tự vào và ra khỏi chương trình.

Mọi thứ tôi đã nói đều đúng không?

P.S. - Tôi hiểu rằng vấn đề đệm này có phần thi phụ thuộc, nhưng tôi chỉ muốn xác nhận những gì các javadocs đang nói

+3

Nghe có vẻ ít nhiều đúng, nhưng bạn nên dựa vào những gì nó nói trong Javadoc, không phải những gì người khác nói. Việc triển khai có nghĩa vụ phải làm những gì nó nói trong Javadoc. Bạn đã bỏ qua 'ObjectOutputStream,' cả hai đều là và không được đệm, tùy thuộc vào chính xác nó đang làm gì. Bạn cũng đã thoát ra khỏi luồng Lọc và trình đọc. – EJP

+0

Chưa đi xa đến vậy;) – Chatterjee

+0

Tôi thích câu hỏi này. Không có vấn đề để giải quyết, chỉ cần tìm kiếm sự hiểu biết. Đó là làm mới. –

Trả lời

1

Quy tắc ngón tay cái:

  1. Bất kỳ InputStream/Reader mà đọc trực tiếp từ một nguồn bên ngoài (FileInputStream, SocketInputStream, vv) là 'thô' và được coi là không bị chặn. (Mặc dù trong thực tế, có thể có một số đệm đang diễn ra, phụ thuộc vào việc triển khai)

  2. Bất kỳ đầu vào hoặc bộ đọc 'thô' nào đều có thể được đệm bởi BufferedInputStream hoặc BufferedReader.

  3. Các giả định tương tự cho OuputStreams/Writers.

  4. Trình trang trí dòng khác (ví dụ: GZIPInputStream, MD5InputStream, YourSpecialObjectWriter) có thể làm một số bộ đệm, nhưng nó không gây hại cho bộ đệm nguồn.

Các vấn đề liên quan