So Sánh Nội Dung 2 Tập Tin Sử Dụng Thư Viện Của Microsoft Visual Studio - C#

Cập nhật ngày: 20/04/2024 - Đã có 674 lượt xem bài viết này!
So Sánh Nội Dung 2 Tập Tin Sử Dụng Thư Viện Của Microsoft Visual Studio - C#
So sánh nội dung giữa 2 tập tin sử dụng thư viện System.Text và System.Security.Cryptography, môi trường C# Microsoft Visual Studio, lợi ích trong việc hạn chế khả năng sao chép, bảo vệ sở hữu trí tuệ. Trong quá trình làm việc với dự án mở rộng về Web cho khách hàng, tôi muốn chia sẻ cho các bạn cách so sánh dữ liệu giữa 2 hay nhiều tập tin, hạn chế và thế mạnh của phương thức hỗ trợ so sánh.

So Sánh Nội Dung 2 Tập Tin Sử Dụng Thư Viện Của Microsoft Visual Studio - C#

Nhược điểm của System.BitConvert trong việc chuyển mảng byte thành chuỗi  hex

  • System.BitConverter là phương thức duy nhất của C# .NET giúp chúng ta có thể chuyển đổi từ mảng byte sang chuỗi giá trị thập lục phân.

  • Khi chuyển đổi, lớp này lưu lại theo định dạng: byte1-byte2-byte3…., như vậy có thể thấy rằng, việc lưu trữ chúng không khả thi hoặc rất phức tạp trong một số dự án mà sử dụng vấn đề de-convert, tức là chuyển từ chuỗi hexa sang mảng byte.

Nhưng trong những dự án nhỏ không chú trọng phần cứng, thì việc từng bước để so sánh từng byte với nhau không là vấn đề lớn.

Sử dụng StringBuilder trong thư viện System.Text

Vì sao sử dụng StringBuilder thay vì String?

Các đối tượng String trong .NET là không đổi. Khi bạn muốn thực thi một hành động trên String, bộ thực thi hành động và chứa kết quả trên một đối tượng con, vì vậy, nếu bạn hay thao tác, xử lí trên String, thì hẳn là sẽ tốn nhiều tài nguyên, vậy nên ta dùng StringBuilder.

StringBuilder?

  • StringBuilder sẽ tạo ra một bộ đệm kí tự, vì vậy bạn có thể thoải mái thực thi trên bộ đệm này mà không lo việc bị tạo đối tượng sau mỗi lần thay đổi.

  • StringBuilder cho phép bạn thay đổi chèn, sửa chữa kiểu dữ liệu dạng khác vào đó. Và phương thức ToString() của StringBuilder là phương thức cuối cùng để chuyển nội dung của đối tượng StringBuilder thành chuỗi.

  • Nhưng cần phải cẩn thận điều gì khi sử dụng? Có 2 thuộc tính quan trọng: Capacity và Length, tương ứng kích thước bộ đệm và kích thước chuỗi.

    • Nếu thêm mới dữ liệu vào lớn hơn Capacity thì nó sẽ cấp phát thêm bộ đệm để chứa chuỗi.

    • Tốn tài nguyên khi bạn cấp phát quá mức cần thiết dữ liệu, vì thế bạn nên dự trù kích thước dữ liệu để cấp phát bộ đệm. Nếu không phải dự án lớn thì cũng không cần quan tâm nhiều.

So sánh một đoạn byte dùng StringBuilder

 

private static bool CompareByteArrToHexadecimalString(byte[] _newstring, string _oldbyte)

{

StringBuilder stringbuilder = new StringBuilder(_newstring.Length);



foreach (byte b in _newstring)

{

stringbuilder.AppendFormat("{0:X2}", b);

}



return (_oldbyte == stringbuilder.ToString());

}
  • Ở đây tôi dùng vòng lặp để chuyển mảng byte thành chuỗi, sau đó chuyển chuỗi đó gắn vào chuỗi thập lục phân của mã băm.

  • Và trả về lại kiểu luận lí bool true false.

  • “X2” có nghĩa là gì?

    • X: định dạng Hexadecimal.

    • 2 = 2 kí tự.

→ Tôi sẽ lưu nó dưới dạng ‘AB’.

So sánh một đoạn byte dùng BitConverter

 

private static void Main(string[] args)

{

// Tạo đối tượng băm

HashAlgorithm hash = HashAlgorithm.Create();



// Trường hợp so sánh 2 files, tức là args.Length==2



//Băm mã file thứ nhất

FileStream _filestreamA = new FileStream(args[0], FileMode.Open);

byte[] hashA = hash.ComputeHash(_filestreamA);

_filestreamA.Close();



//Băm mã file thứ hai

FileStream _filestreamB = new FileStream(args[1], FileMode.Open);

byte[] hashB = hash.ComputeHash(_filestreamB);

_filestreamB.Close();



if (BitConverter.ToString(hashA) == BitConverter.ToString(hashB))

{

Console.WriteLine("Trùng nhau");

}

else

{

Console.WriteLine("Không trùng");

}

}

Để tạo một mã băm, cần phải tạo một đối tượng HashAlgorithm bằng phương thức tĩnh HashAlgorithm.Create() có sẵn trong lớp System.Security.Cryptography

Sau đó gọi hash.ComputeHash để nhận một mảng byte chứa mã băm.

Lời kết

Trên đây tôi đã sử dụng StringBuilder và lớp BitConverter để so sánh dữ liệu giữa 2 file một cách cơ bản. Việc sử dụng loại nào tùy thuộc vào tính chất của dự án. Mỗi phương pháp đều có ưu điểm riêng và hạn chế như tôi đã đề cập.

Cảm ơn bạn đã đọc. Hi vọng nó sẽ giúp ích cho những bạn quan tâm tới giải pháp so sánh dữ liệu giữa 2 hoặc nhiều, sử dụng các phương thức tối ưu trong thư viện có sẵn của C#.NET.

 

Tại sao bạn nên học Lập trình Game Unity3D ngay hôm nay?

👉 “Game" hẳn là một từ khóa đã rất quen thuộc với mọi người và sẽ còn thú vị hơn nữa khi chính bạn có thể tạo ra các sản phẩm Game đó. 
👉 Hiểu được điều đó IMIC đã tổ chức ra khóa đào tạo nhân sự lập trình Game với Unity3D. 
👉 Đây là khóa đào tạo toàn diện nhất về lập trình Game Unity3D. 
👉 Khóa đào tạo này sẽ trang bị cho các bạn đầy đủ các kỹ năng, kiến thức chuyên môn nền tảng về Unity3D, cách mà chúng ta sử dụng nó để phát triển trò chơi đa nền tảng mạnh mẽ. 
👉 Đây là nền tảng phát triển Game 3D & 2D chất lượng cao, sử dụng trên thiết bị di động, máy tính để bàn, VR/AR, các hệ máy Console như PS4, XBOX và Nintendo Switch hoặc Web, khả năng là vô tận. 
👉 Nếu bạn muốn tạo ra một trò chơi tương tác hấp dẫn và hình ảnh sinh động thì Unity 3D là một nền tảng nổi bật hỗ trợ các nhà phát triển các tính năng và tùy chọn chơi game theo cách hấp dẫn nhất. Việc lập trình ứng dụng game của bạn trở nên dễ dàng hơn khi thế giới ảo hiện ra sống động. 
👉 Và điều đặc biệt là bạn được học & làm dự án Game 2D, 3D cùng Chuyên gia có nhiều năm kinh nghiệm phát triển & quản lý dự án Game.

Dưới đây là những điều tuyệt vời và bạn nên học lập trình Game Unity3D ngay hôm nay!.
✅ Unity 3D bao gồm một phiên bản hoàn toàn miễn phí để các lập trình viên có thể sử dụng để tạo ra các sản phẩm game với nhiều tính năng nổi bật.
✅ Unity 3D hỗ trợ IOS, Android, Mac, PC, Steam và thậm chí cả các hệ máy Console. Có thể hiểu, bạn có thể tạo ra trò chơi cho tất cả các nền tảng và thiết kế trò chơi một cách dễ dàng. Với Unity, việc nâng cấp các phiên bản trò chơi cũng trở nên dễ dàng hơn.
✅ Quá trình phát triển trò chơi rất phức tạp và bạn sẽ cần đến sự hỗ trợ từ cộng đồng các nhà phát triển, với hơn 3 triệu lập trình viên Unity và tăng nhanh mỗi ngày, các vấn đề bạn gặp phải sẽ được giải quyết nhanh chóng với nhiều giải pháp tốt cho bạn. 
✅ Unity Asset Store cung cấp cho các nhà phát triển 1 kho thư viện đồ sộ như: nhân vật, xe cộ, cây cối, tòa nhà,...
✅ Bạn có thể viết kịch bản để phát triển Game Unity 3D với sự trợ giúp của Javascript hoặc C#, những ngôn ngữ kịch bản mà không quá khó để làm chủ nó.
✅ Unity 3D được biết đến với sự sống động 3D, nhưng nó cũng rất hiệu quả khi phát triển Game 2D cho PC, điện thoại di động và thậm chí cho máy chơi game. Có thể dễ dàng thực hiện chuyển động sprite, thực hiện khoa học vật lý của thế giới 2D và làm nhiều hơn thế nữa.
✅ Phần tốt nhất về Unity là có rất nhiều bài viết hướng dẫn và video đào tạo phát triển game có sẵn trên web cho bất kỳ ai muốn tìm hiểu. 
✅ Người học chỉ cần dành 1 thời gian ngắn tìm hiểu là đã có thể tạo ra các trò chơi nhỏ với một số tính năng thú vị rồi.
✅ Hàng năm luôn có các hội thảo được tổ chức để công bố các tiện ích cho các nhà phát triển và tạo sự kết nối mọi người trong cộng đồng để cùng phát triển lĩnh vực Game với Unity 3D.
✅ Và một điều đặc biệt nữa là nhu cầu tuyển dụng lập trình viên phát triển Game Unity 3D ở việt nam đang cần rất nhiều, cơn khát nhân sự này không chỉ hiện tại và còn kéo dài nhiều năm tiếp theo.

📣 Trước tình hình dịch bệnh Covid diễn biến còn phức tạp như hiện nay, thì để tạo điều kiện tốt nhất cho các bạn học viên có niềm đam mê yêu thích về lập trình Game Unity3D, Phòng đào tạo nhân sự của IMIC đưa ra chính sách hỗ trợ kinh phí với mức tốt nhất. Liên hệ ngay để được tư vấn đăng ký tham gia khóa đào tạo này.

Cảm ơn bạn đã dành thời gian lắng nghe những chia sẻ về Unity3D. Và tuyệt vời hơn nữa nếu IMIC được góp phần vào sự thành công của bạn! 

Tham khảo các khóa đào tạo nhân sự qua danh mục