2010-03-11 35 views
14

Hôm nay tôi nhận được câu hỏi này mà tôi nghĩ rằng tôi đã trả lời rất tệ. Tôi nói luồng là một dữ liệu chảy và đọc là một kỹ thuật mà chúng ta đọc từ đó là một dữ liệu tĩnh. Tôi biết đây là một câu trả lời khủng khiếp, vì vậy hãy cung cấp cho tôi sự khác biệt rõ nét và định nghĩa giữa hai ví dụ này bằng Java.Sự khác biệt giữa luồng và trình đọc trong Java là gì?

Cảm ơn.

Trả lời

11

Như những người khác đã nói, các trường hợp sử dụng đối với từng hơi khác nhau (mặc dù họ thường có thể được sử dụng thay thế cho nhau)

Kể từ khi độc giả đang đọc ký tự, họ là tốt hơn khi bạn đang đối phó với đầu vào đó là bản chất nguyên bản (hoặc dữ liệu được biểu diễn dưới dạng ký tự). Tôi nói tốt hơn bởi vì người đọc (trong bối cảnh sử dụng điển hình) chủ yếu là các luồng với các phương thức dễ dàng tạo điều kiện cho việc đọc ký tự đầu vào.

+1

+1 thực sự là điểm, Reader thường được hỗ trợ bởi một InputStream của một số loại (không phải lúc nào - xem StringReader) và thực hiện chuyển đổi byte thành ký tự unicode 16 bit . – Yishai

9

Luồng để đọc byte, Reader dùng để đọc các ký tự. Một ký tự có thể mất một byte trở lên, tùy thuộc vào bộ ký tự.

+0

một ký tự có ít nhất 2 byte trong java, đúng không? –

+0

Khi đọc từ luồng, ánh xạ giữa các byte và ký tự được đưa ra bằng cách mã hóa. Đối với UTF-8, một ký tự có thể nằm trong khoảng từ 1 đến 6 byte. –

16

Một luồng đầu vào là định hướng byte. Một Reader là định hướng nhân vật.

Javadocs là bạn của bạn, giải thích sự khác biệt. Reader, InputStream

+3

Không nói RTFM. –

+0

mở rộng RTFM là gì? – bragboy

+3

RTFM == Đọc Hướng dẫn sử dụng – NomeN

5

Lớp dòng là lớp định hướng byte, có nghĩa là tất cả các lớp dữ liệu đọc 1 byte (đệm và không đệm) theo byte từ luồng và tất cả các lớp OutputStream (Đệm và không đệm) ghi byte dữ liệu theo byte vào luồng . Các lớp luồng hữu ích khi bạn có dữ liệu nhỏ hoặc nếu bạn đang xử lý các tệp nhị phân như hình ảnh.

Mặt khác, Reader/Writer là các lớp dựa trên ký tự. Các lớp này đọc hoặc viết một ký tự tại thời điểm từ hoặc vào luồng. Các lớp này mở rộng hoặc là java.io.Reader (tất cả các lớp nhập ký tự) hoặc java.io.Writer (tất cả các lớp đầu ra ký tự). Các lớp này hữu ích nếu bạn đang xử lý tệp văn bản hoặc luồng văn bản khác. Các lớp này cũng là BufferedNon-Buffered.

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