2013-08-20 41 views
18

Trạng thái Stream docsDuplex Streams "là các luồng triển khai cả giao diện có thể đọc và có thể ghi" và Transform Streams "là luồng song công nơi đầu ra theo cách nào đó được tính từ đầu vào". Thật không may, các tài liệu không mô tả những gì các luồng chuyển đổi cung cấp ở trên và ngoài luồng song công.NodeJS: Sự khác nhau giữa luồng Duplex và luồng Chuyển đổi là gì?

Có sự khác biệt nào giữa hai loại này không? Khi nào bạn sử dụng cái kia?

Trả lời

52

Luồng song công có thể được coi là luồng có thể đọc được với luồng có thể ghi. Cả hai đều độc lập và đều có bộ đệm bên trong riêng biệt. Các sự kiện đọc và viết diễn ra độc lập.

       Duplex Stream 
          ------------------| 
        Read <-----    External Source 
      You   ------------------| 
        Write ----->    External Sink 
          ------------------| 
      You don't get what you write. It is sent to another source. 

Một dòng chuyển đổi là một duplex nơi đọc và ghi diễn ra theo một cách nhân quả. Các điểm kết thúc của luồng song công được liên kết thông qua một số biến đổi. Đọc yêu cầu viết đã xảy ra.

        Transform Stream 
          --------------|-------------- 
      You  Write ---->     ----> Read You 
          --------------|-------------- 
      You write something, it is transformed, then you read something. 
+1

Tôi nghĩ tôi hiểu! Transform Streams phải thực hiện phương thức '_transform', có cùng chữ ký với phương thức' _write' của Writeable Stream, do đó điều này ngụ ý rằng những gì được đọc phụ thuộc vào những gì được viết. Một ngụ ý của điều này là bạn không thể xác định số lượng byte được đọc tại một thời điểm như với '_read', nó chỉ đơn giản là số byte bạn đã viết. Mặt khác, với luồng song công, bạn * có thể * về mặt lý thuyết tạo một '_read' phụ thuộc vào' _write' hoặc thậm chí có '_write' phụ thuộc vào' _read', nhưng không có liên kết đọc/ghi nào được ngụ ý bởi chính lớp Duplex Stream. – brainkim

+2

+1 cho biểu đồ ascii, chúng nên được sử dụng trong tài liệu node.js sẽ giúp truyền đạt các khái niệm tốt hơn nhiều –

2

Sự khác biệt chỉ là đường cú pháp. Chuyển đổi luồng là luồng song công hoàn chỉnh nhưng thay vì thực hiện các phương thức _write_read, bạn được yêu cầu triển khai chỉ phương thức _transform. Bạn có thể đọc thêm về các luồng trên số xuất sắc substack's streams guide hoặc từ Isaacs's readable-stream repo.

2

Nếu bạn đọc phần API for stream implementors của tài liệu, họ nêu rõ một số trường hợp sử dụng cho luồng Duplex và Transform là "Đọc và ghi" và "Hoạt động trên dữ liệu văn bản, sau đó đọc kết quả" tương ứng.

Chỉ cần đặt luồng Chuyển đổi cho phép bạn triển khai phương thức _transform lấy một số đầu vào và trả về kết quả sau khi một số thao tác đã được thực hiện trên dữ liệu và có thể được sử dụng cho những thứ như nén hoặc băm. được sử dụng cho những thứ như kết nối ổ cắm TCP nơi bạn chỉ cần gửi và nhận dữ liệu.

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