Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 7 của 7
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    hỏi về [serializable] và [synchronization]


  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    [Serializable] là một Attribute để đánh dấu một đối tượng có khả năng tuần tự hóa, được sử dụng khi bạn cần chuyển dữ liệu vào một file để lưu trữ hoặc chuyển dữ liệu qua mạng...
    Tùy theo từng mục đích có các loại serializable khác nhau, mình xin ví dụ về Serialization một class để lưu trữ vào trong một file, nhớ imports namespace:

    Mã:
    using System.Runtime.Serialization.Formatters.Binary;using System.IO;
    Mã:
        [Serializable]    class Person    {        public string Name;        public int Age;        public Person(string name, int age)        {            this.Name = name;            this.Age = age;        }    }            //Trước tiên phải tạo một luồng đến file.           Stream stream = new FileStream(@"C:\Test.btc", FileMode.OpenOrCreate);            Person p = new Person("Thanh Chung", 20);            // đổi tượng BinaryFormatter được sử dụng cho quá trình tuần tự hóa nhị phân.            BinaryFormatter formatter = new BinaryFormatter();            //Phương thức Serialize để thực thi tuần tự hóa.            formatter.Serialize(stream, p);                     Console.ReadLine();
    OK, bây giờ bạn hãy F5 sau đó thì mở ổ C ra, một file có tên Test.btc đã được tạo, bây giờ ta sẽ tiến hành đọc dữ liệu từ file này, ta thực hiện quá trình ngược lại: Deserialize

    Mã:
               Stream stream = new FileStream(@"C:\Test.btc",          FileMode.OpenOrCreate);                        BinaryFormatter formatter = new BinaryFormatter();               quá trình Deserialize ngược với quá trình Serialize, trả về một object, bạn nhớ ép kiểu để sử dụng.                       Person p = formatter.Deserialize(stream) as Person;            Console.WriteLine(p.Name);            Console.WriteLine(p.Age.ToString());            Console.ReadLine();
    [Synchronization] là một Attribute áp dụng cho các đối tượng dẫn xuất từ System.ContextBoundObject , sau khi được áp dụng thuộc tính này, đối tượng sẽ được bảo vệ thực thi một cách đồng bộ, tránh được sự tranh chấp tài nguyên giữa các Thread, cũng giống như bạn thực hiện kĩ thuật lock vậy, khác là tất cả được thực hiện một cách tự động.
    Ví dụ:
    Trước tiên bạn khai báo imports namespace:

    Mã:
    using System.Runtime.Remoting.Contexts;using System.Threading;
    Mã:
        class Program    {        static void Main(string[] args)        {            new AutoLock().Test();        }           }     [Synchronization]    public class AutoLock : ContextBoundObject    {        public void Demo()        {            Console.Write("Start...");            Thread.Sleep(1000);            Console.WriteLine("end"); // lock được thực hiện tự động.        }        public void Test()        {            new Thread(Demo).Start();            new Thread(Demo).Start();            new Thread(Demo).Start();            Console.ReadLine();        }    }
    Đoạn code trên tương đương với (Bỏ đi thuộc tính [Synchronization])

    Mã:
            public void Demo()        {            lock (this)            {                Console.Write("Start...");                Thread.Sleep(1000);                Console.WriteLine("end");            }        }
    Bạn có thể tham khảo thêm về [Synchronization]
    http://www.eggheadcafe.com/software/...attribute.aspx

  3. #3
    ok thanks bạn

  4. #4
    thực sự tớ không hiểu lắm.Cậu có thể cho tớ 1 ví dụ mà bắt buộc phải Serialization 1 đối tượng trước khi lưu vào file. vì mình cứ lưu 1 cái gì đó vào file rồi lát sau mình mở nó ra đọc bình thường,

    Chú ý: Không quote cả bài viết dài như vậy.

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    cho mình hỏi lại synchornization chút
    Mình đọc kỹ sách thấy 2 vấn đề :
    1> khi đc apply [Synchronization] thì nó trở thành thread-safe (vì sao ?)
    2> khi derive from ContextBoundObject thì CLR does not move its method object outside of a synchronized context (giải thích giùm mình vì sao ko move ra ngoài synchronized context)
    thanks

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi nthung
    thực sự tớ không hiểu lắm.Cậu có thể cho tớ 1 ví dụ mà bắt buộc phải Serialization 1 đối tượng trước khi lưu vào file. vì mình cứ lưu 1 cái gì đó vào file rồi lát sau mình mở nó ra đọc bình thường,

    Chú ý: Không quote cả bài viết dài như vậy.
    Dùng Serialization để đọc những file có dung lượng hàng Gb, hoặc là truyền qua mạng vì thời gian thực hiện lâu. Đặc biệt được sd khi truyền file qua mạng.
    Bạn có thể tham khảo thêm ở đây:
    http://my.opera.com/hapn2/bloget-serialization

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    ủa anh ơi cho em hỏi là e ghi nhiều dữ liệu xuống thì làm thế nào ạ?
    vd e thêm nhiều như thế này
    Person p1 = new Person("Thanh Chung 1", 20);
    Person p2 = new Person("Thanh Chung 2", 21);
    Person p3 = new Person("Thanh Chung 3", 22);

    nếu ghi xong rùi đọc lên như thế nào?tại nó nhiều mẫu tin rùi mình dùng gì để lấy lên?

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •