2011-02-10 25 views
65

Câu hỏi:FileStream vs/difference StreamWriter?

Điểm khác biệt giữa FileStream và StreamWriter trong dotnet là gì?

Bạn đang sử dụng ngữ cảnh nào? Lợi thế và bất lợi của họ là gì?

Có thể kết hợp hai thứ này thành một không?

Trả lời

79

Điểm khác biệt giữa FileStream và StreamWriter trong dotnet là gì?

A FileStreamStream. Giống như tất cả các luồng, nó chỉ đề cập đến dữ liệu byte[].

A StreamWriter : TextWriter, là một Trình trang trí nội dung. Một TextWriter mã hóa dữ liệu văn bản như chuỗi hoặc char để byte[] và sau đó ghi nó vào Stream được liên kết.

Bạn đang sử dụng ngữ cảnh nào? Lợi thế và bất lợi của họ là gì?

Bạn sử dụng FileStream trống khi có dữ liệu byte[]. Bạn thêm StreamWriter khi bạn muốn viết văn bản. Sử dụng Trình định dạng hoặc Trình nối tiếp để ghi dữ liệu phức tạp hơn.

Có thể kết hợp hai thứ này thành một không?

Có. Bạn luôn cần một Stream để tạo StreamWriter. Phương thức trợ giúp System.IO.File.CreateText("path") sẽ tạo ra chúng kết hợp và sau đó bạn chỉ cần vứt bỏ() bộ ghi bên ngoài.

+1

Cũng cần lưu ý rằng 'FileStream' là một loại luồng, được đặc biệt phù hợp với các tệp. Các luồng thực sự hoạt động với các byte, tuy nhiên 'StreamWriter'/Reader sẽ viết/đọc văn bản trên luồng * * bất kỳ, không chỉ' FileStream '. Ví dụ: 'MemoryStreams',' NetworkStreams', v.v. – iliketocode

18

FileStream ghi byte, StreamWriter viết văn bản. Đó là tất cả.

+11

Thực ra, đó không phải là "tất cả" ... Nhưng đó là một sự khác biệt chính xác. – David

14

Một luồng tệp được dự định rõ ràng để làm việc tệp.

Một StreamWriter có thể được sử dụng để truyền cho bất kỳ loại Stream - ổ cắm mạng, tập tin, vv

ScottGu giải thích các đối tượng khác nhau Suối khá độc đáo ở đây: http://www.codeguru.com/Csharp/Csharp/cs_data/streaming/article.php/c4223

+1

Tham chiếu tuyệt vời cho luồng, mặc dù nó không bao gồm luồng R/W truy cập ngẫu nhiên. Đặc biệt là thông tin tuần tự hóa/deserialization và trình diễn các luồng không tập tin là rất hữu ích. +1 – ThunderGr

7

Vâng, từ MSDN cho FileStream :

Hiển thị luồng xung quanh tệp, hỗ trợ cả hoạt động đọc và ghi đồng bộ và không đồng bộ.

và MSDN cho StreamWriter:

Thực hiện một TextWriter để viết ký tự để một dòng suối trong một mã hóa đặc biệt.

Sự khác biệt rõ ràng nhất là FileStream cho phép hoạt động đọc/ghi, trong khi StreamWriter chỉ ghi.

Trang StreamWriter tiếp tục thêm:

StreamWriter được thiết kế cho ra nhân vật trong một mã hóa đặc biệt, trong khi lớp học bắt nguồn từ suối được thiết kế cho đầu vào và đầu ra byte.

Vì vậy, khác biệt thứ hai là FileStream là dành cho byte, trong khi StreamWriter là dành cho văn bản.

5

Chúng là hai cấp độ khác nhau được sử dụng để xuất thông tin vào các nguồn dữ liệu đã biết.

Tệp luồng là một loại Luồng, là khái niệm cơ chế trỏ đến một số vị trí và có thể xử lý dữ liệu đến và/hoặc đi đến và từ vị trí đó. Các luồng tồn tại để đọc/ghi vào các tệp, kết nối mạng, bộ nhớ, đường ống, bảng điều khiển, trình gỡ lỗi và trình theo dõi và một vài loại nguồn dữ liệu khác. Cụ thể, một FileStream tồn tại để thực hiện đọc và ghi vào hệ thống tệp. Hầu hết các luồng đều có mức độ sử dụng khá thấp và xử lý dữ liệu dưới dạng byte.

StreamWriter là trình bao bọc cho Luồng đơn giản hóa sử dụng luồng đó để xuất văn bản thuần túy. Nó cho thấy các phương thức lấy chuỗi thay vì byte và thực hiện các chuyển đổi cần thiết đến và từ mảng byte. Có những nhà văn khác; một chính khác mà bạn muốn sử dụng là XmlTextWriter, tạo điều kiện cho việc ghi dữ liệu ở định dạng XML. Ngoài ra còn có các đối tác Reader cho các Nhà văn tương tự bao bọc một luồng và tạo điều kiện cho việc lấy lại dữ liệu.

0

Một khác biệt chính (ngoài các nhận xét ở trên), có thể là FileStream hỗ trợ acceess đĩa ngẫu nhiên đọc và ghi vào bất kỳ FileStream.Position cụ thể nào. Đối với những sửa đổi tập tin lớn, điều đó có thể là vô giá.

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