2012-04-27 33 views
27

Cả StreamReaderBinaryReader có thể được sử dụng để lấy dữ liệu từ tập tin nhị phân (ví dụ)StreamReader vs BinaryReader?

BinaryReader:

using (FileStream fs = File.Open(@"c:\1.bin",FileMode.Open)) 
      { 
        byte[] data = new BinaryReader(fs).ReadBytes((int)fs.Length); 
        Encoding.getstring.... 
      } 

StreamReader:

using (FileStream fs = File.Open(@"c:\1.bin",FileMode.Open)) 
      { 
       using (StreamReader sr = new StreamReader(fs,Encoding.UTF8)) 
       { 
         var myString=sr.ReadToEnd(); 
       } 
      } 

sự khác biệt là gì và khi nào tôi nên sử dụng?

+2

Một tệp phù hợp cho tệp văn bản, tệp còn lại dành cho tệp nhị phân? Như bạn thậm chí còn lảng tránh trong mã mẫu của bạn. –

+0

@Adam Houldsworth utf8 chuỗi cũng có thể chứa dữ liệu nhị phân. –

+1

Có, nhưng có lẽ được mã hóa dưới dạng chuỗi UTF-8 ... do đó, bản chất sẽ là văn bản. –

Trả lời

62

Cả hai StreamReader và BinaryReader có thể được sử dụng để lấy dữ liệu từ tập tin nhị phân

Vâng, StreamReader thể được sử dụng để lấy dữ liệu văn bản từ một đại diện nhị phân của văn bản.

BinaryReader có thể được sử dụng để nhận dữ liệu nhị phân tùy ý. Nếu một số dữ liệu nhị phân đó xảy ra là một biểu diễn của văn bản, điều đó là tốt - nhưng nó không phải là.

Bottom line:

  • Nếu toàn bộ dữ liệu của bạn là một mã hóa nhị phân đơn giản của dữ liệu văn bản, sử dụng StreamReader.
  • Nếu bạn đã cơ bản có nhị phân dữ liệu có thể xảy ra để có một số phần trong văn bản, sử dụng BinaryReader

Vì vậy, ví dụ, bạn sẽ không cố gắng đọc một tập tin JPEG với StreamReader.

+0

nhưng một chuỗi utf8 có thể chứa bên trong nó ngay cả dữ liệu nhị phân .. vì vậy ...? –

+0

không phải là chuỗi utf8 có thể chứa bất kỳ thông tin nào không? –

+4

@RoyiNamir: Không, chuỗi là văn bản. Thậm chí không có một thứ như "chuỗi UTF-8" - có một biểu diễn nhị phân UTF-8 * * của một chuỗi ... Một chuỗi giữ dữ liệu văn bản - đó là một chuỗi ký tự. Sau đó, bạn chuyển đổi nó thành một biểu diễn nhị phân bằng cách sử dụng một mã hóa, chẳng hạn như UTF-8. Vui lòng đọc http://csharpindepth.com/Articles/General/Unicode.aspx –

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