2010-06-11 31 views
17

Có an toàn khi sử dụng cùng một đối tượng Encoding từ các chủ đề khác nhau không?An toàn chủ đề và System.Text.Encoding trong C#

Bằng cách "sử dụng" Ý tôi là, gọi Encoding.GetString(), Encoding.GetBytes() và viết một số XML với một (

Các trang web XmlWriter tạo ra bởi một cái gì đó giống như XmlWriter.Create(myStream, new XmlWriterSettings() { Encoding = myEncoding }).

MSDN nói rằng "Bất cứ thành viên dụ không đảm bảo được đề an toàn" .

vì vậy, làm thế nào tôi có thể an toàn viết hai tài liệu XML đồng thời (cảm ơn bạn !!)

Trả lời

23

có, nó phải là an toàn để sử dụng cùng một đối tượng Encoding, vì nó được thiết kế để được quốc tịch - trong khi EncoderDecoder là nhà nước, duy trì các ký tự không đầy đủ, vv nếu cần thiết. Tôi cho rằng bạn có thể viết một lớp học có trạng thái là Encoding, nhưng đó thực sự là một ý tưởng tồi. Theo như tôi biết, tất cả các triển khai mã hóa được cài sẵn đều là không trạng thái và an toàn luồng.

Ví dụ: các thuộc tính Encoding.UTF8, v.v. là các tệp đơn.

+0

Cảm ơn bạn !! Tôi chỉ muốn chắc chắn bởi vì nhưng không thể tìm thấy một xác nhận ở nơi khác. – thaller

+0

Có phải không? Các thuộc tính tĩnh trên 'Encoding' là an toàn luồng, nhưng điều đó không ngụ ý rằng các đối tượng được hiển thị bởi các thuộc tính đó là an toàn luồng. Tôi đang ở trong một tình huống mà tôi phải mã hóa một số lượng lớn * chuỗi song song và tôi không muốn tạo ra nhiều trường hợp của cá thể 'Utf8Encoding'. – casperOne

+0

@casperOne: Hai câu hỏi: 1) Bạn có biết rằng 'Encoding.UTF8' thực sự cung cấp mã hóa mới mỗi lần; 2) Bạn đã thực sự * đo * liệu nó sẽ là một vấn đề để tạo ra một cá thể mới mỗi lần ngay cả khi nó? –