FileStream so với / khác biệt StreamWriter?


85

Câu hỏi:

Sự khác biệt giữa FileStreamStreamWritertrong .Net là gì?

Bạn phải sử dụng nó trong ngữ cảnh nào? Ưu điểm và nhược điểm của họ là gì?

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

Câu trả lời:


98

Sự khác biệt giữa FileStream và StreamWriter trong dotnet là gì?

A FileStreamlà a Stream. Giống như tất cả các Luồng, nó chỉ xử lý byte[]dữ liệu.

A StreamWriter : TextWriter, là một Stream-decorator. TextWriter mã hóa dữ liệu Văn bản như chuỗi hoặc ký tự byte[]và sau đó ghi nó vào liên kết Stream.

Bạn phải sử dụng nó trong ngữ cảnh nào? Ưu điểm và nhược điểm của họ là gì?

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

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

Đúng. 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 chúng kết hợp với nhau và sau đó bạn chỉ phải Loại bỏ () trình ghi bên ngoài.


4
Cũng cần lưu ý rằng đó FileStreamlà một loại luồng, được điều chỉnh cụ thể cho các tệp. Luồng nguyên bản hoạt động với byte, tuy nhiên StreamWriter/ Reader sẽ viết / đọc văn bản trên bất kỳ luồng nào , không chỉ FileStreams. Ví dụ, MemoryStreams, NetworkStreams, vv ..
iliketocode

19

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


14
Trên thực tế, đó không phải là "tất cả" ... Nhưng đó là một sự khác biệt chính xác.
David

14

FileStream được dành riêng cho các tệp đang hoạt động.

Một StreamWriter có thể được sử dụng để phát trực tuyến đến bất kỳ loại Luồng nào - ổ cắm mạng, tệp, v.v.

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


1
Tham chiếu tuyệt vời cho các luồng, mặc dù nó không bao gồm các luồng R / W truy cập ngẫu nhiên. Đặc biệt là thông tin tuần tự hóa / giải mã hóa và trình diễn các luồng không phải tệp 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:

Triển khai TextWriter để ghi các ký tự vào một luồng trong một bảng mã cụ thể.

Sự khác biệt rõ ràng nhất là FileStreamcho phép thao tác đọc / ghi, trong khi StreamWriterchỉ ghi.

Các StreamWritertrang tiếp tục add:

StreamWriter được thiết kế cho đầu ra ký tự trong một mã hóa cụ thể, trong khi các lớp bắt nguồn từ Stream được thiết kế cho đầu vào và đầu ra byte.

Vì vậy, sự khác biệt thứ hai là FileStreambyte, trong khi StreamWriterlà văn bản.


6

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

A FileStreamlà một loại Luồng, về mặt khái niệm là một cơ chế trỏ đến một số vị trí và có thể xử lý dữ liệu đến và / hoặc đi đến và đi từ vị trí đó. Các luồng tồn tại để đọc / ghi vào tệp, kết nối mạng, bộ nhớ, đường dẫn, bảng điều khiển, trình nghe gỡ lỗi và theo dõi, và một số loại nguồn dữ liệu khác. Cụ thể, một FileStreamtồ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 có mức sử dụng khá thấp và xử lý dữ liệu dưới dạng byte.

A StreamWriterlà một trình bao bọc cho Luồng giúp đơn giản hóa việc sử dụng luồng đó để xuất văn bản thuần túy. Nó hiển thị 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à đi từ mảng byte. Có những nhà văn khác; cái chính khác mà bạn sẽ sử dụng là XmlTextWriter, hỗ trợ việc ghi dữ liệu ở định dạng XML . Ngoài ra còn có các đối tác Reader với Writers tương tự như vậy bao bọc một Luồng và tạo điều kiện lấy lại dữ liệu.


0

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.