2014-09-03 43 views
8

Khi sách của tôi cho biết: luồng là chuỗi ký tự được đọc hoặc ghi từ thiết bị thì sách của tôi cho biết: các kiểu istreamostream đại diện cho luồng đầu vào và đầu ra (nghĩa là gì?) Cách thực hiện chính xác công việc coutcin ?Luồng chính xác là gì?

Tôi không phải là ngôn ngữ gốc và tôi không thể hiểu khi sách của tôi cho biết: toán tử đầu ra ghi giá trị đã cho trên ostream nhất định.

+1

hơi nước có thể là bi-directional hoặc uni-directional. đó là tất cả –

+0

xem tổng quan về các lớp học trực tuyến tại đây: http://www.cplusplus.com/reference/iolibrary/ – BeyelerStudios

Trả lời

3

Bạn có thể xác định nó bằng các từ đơn giản dưới dạng luồng dữ liệu có thể là luồng đầu vào và luồng đầu ra. Vì vậy, bạn có thể nghĩ về nó như là luồng dữ liệu từ một chương trình đến một tập tin hoặc ngược lại. Những hình ảnh dưới đây có thể giúp bạn hiểu nó tốt hơn:

enter image description here

enter image description here

Từ MSDN

các dòng là khái niệm trung tâm của lớp iostream. Bạn có thể nghĩ về một đối tượng luồng dưới dạng tệp thông minh đóng vai trò như một nguồn và đích đến cho các byte là . Các đặc tính của luồng được xác định bởi lớp của nó và bằng các toán tử chèn và trích xuất tùy chỉnh.

8

Ý tưởng cơ bản đằng sau ẩn dụ của một "dòng" là nó cung cấp hoặc tiêu thụ dữ liệu trong một single-pass thời trang: ví dụ, đối với một input stream, dữ liệu được tạo ra một cách chính xác lần. Bạn có thể yêu cầu luồng cho một số dữ liệu khác và sau khi luồng đã cung cấp cho bạn dữ liệu, nó sẽ không bao giờ cung cấp cho bạn dữ liệu đó một lần nữa.

Đây là lý do để làm bất kỳ điều gì có ý nghĩa với luồng, bạn thường rất muốn đính kèm một loại bộ đệm (một "bộ đệm luồng", nếu bạn muốn) vào một cửa hàng (thường nhỏ) lượng dữ liệu được trích xuất từ ​​luồng trong bộ nhớ truy cập ngẫu nhiên, có thể kiểm tra và có thể xử lý được. (Có những ý tưởng tương tự, được đảo ngược cho luồng đầu ra.)

Thỉnh thoảng, việc xử lý luồng mà không có bất kỳ bộ đệm nào cũng có ý nghĩa. Ví dụ, nếu bạn có một đầu vào và một dòng đầu ra và bạn đọc số nguyên từ đầu vào và ghi giá trị tăng gấp đôi của mỗi số nguyên vào đầu ra, bạn có thể làm điều đó mà không cần đệm.

Vì vậy, khi nghĩ về phạm vi dữ liệu, luồng là những thứ bạn chỉ có thể duyệt qua một lần và không bao giờ trở lại. Nếu bạn đang suy nghĩ về tiến độ, thì luồng có thuộc tính khác, có thể là khối: luồng đầu vào có thể chặn khi không có dữ liệu và luồng đầu ra có thể chặn khi không thể chấp nhận thêm dữ liệu . Theo cách đó, từ bên trong logic chương trình, bạn có thể tưởng tượng rằng luồng đầu vào luôn luôn chứa dữ liệu cho đến khi kết thúc, nhưng chương trình dựa vào đó có thể chạy trong một khoảng thời gian đồng hồ treo tường bất thường.

+0

Có thể hữu ích để chỉ ra rằng lịch sử đầu cuối được hiển thị qua CRT (hoặc tương đương hiện đại (lol)) là một bộ đệm trong ngữ cảnh này. –

1

Từ quan điểm ngôn ngữ, luồng chỉ là đối tượng có giao diện giống như luồng: chúng cho phép bạn trích xuất dữ liệu từ luồng đó (luồng đầu vào) hoặc đẩy dữ liệu vào đó (luồng đầu ra). Luồng đầu vào không cho phép truy cập ngẫu nhiên (bất kỳ điều gì có thể có nghĩa) đối với dữ liệu mà chúng cung cấp (bất kỳ điều gì có thể).

Lưu ý rằng đây hoàn toàn là mô tả giao diện cho một lớp học, không có gì khác. Trường hợp luồng lấy dữ liệu của nó từ/dữ liệu được thực hiện với dữ liệu được đẩy vào đó, hoàn toàn phụ thuộc vào luồng. Một luồng là một trừu tượng để nhận/gửi dữ liệu. Việc thực hiện cụ thể một luồng có thể đọc dữ liệu từ một ứng dụng đầu cuối và đưa nó vào chương trình (cin), một số khác có thể trả về các ký tự cho ứng dụng đầu cuối theo yêu cầu của chương trình (cout), thứ ba có thể đọc/ghi dữ liệu từ/vào một tệp (fstream s), thứ tư có thể đọc/ghi dữ liệu từ/vào bộ nhớ đệm (stringstream), thứ năm có thể đọc dữ liệu từ trình tạo số ngẫu nhiên, v.v. Khả năng này rất nhiều, cũng giống như các triển khai khác nhau của giao diện luồng đã được tạo ra.

Đó là vẻ đẹp của sự trừu tượng của luồng: đó là một cách rất linh hoạt cho một đoạn mã để giao tiếp. Quá trình này không cần phải biết bất cứ điều gì về nguồn/đích của dữ liệu của nó, ngoài ra nó có thể đọc/ghi dữ liệu từ/đến nó.