×

Xử lý dữ liệu đầu vào và đầu ra (I/O) trong C#

Khi làm việc với C#, việc xử lý dữ liệu đầu vào và đầu ra (I/O) là phần quan trọng của bất kỳ ứng dụng nào. Điều này bao gồm việc đọc dữ liệu từ các nguồn khác nhau như bàn phím, tệp tin hay các nguồn dữ liệu từ mạng, cũng như việc ghi dữ liệu ra các thiết bị, tệp tin hoặc gửi qua mạng.

Một trong những khía cạnh cơ bản của I/O trong C# là sử dụng các lớp từ thư viện .NET Framework, chủ yếu thuộc namespace System.IO.

1. Đọc và ghi dữ liệu từ bàn phím và màn hình

C# cung cấp các phương pháp đơn giản để tương tác với bàn phím và màn hình thông qua lớp Console.

a. Đọc dữ liệu từ bàn phím

Console.Write("Nhập tên của bạn: ");
string name = Console.ReadLine();
Console.WriteLine("Xin chào, " + name);

b. Ghi dữ liệu ra màn hình

Console.WriteLine("Đây là một thông báo hiển thị trên màn hình.");

2. Xử lý tệp tin

Làm việc với tệp tin thường là một nhu cầu phổ biến trong lập trình. C# cung cấp các lớp như File, StreamReader, StreamWriter, FileStream để dễ dàng quản lý việc đọc và viết tệp.

a. Đọc tệp tin

Bạn có thể sử dụng lớp StreamReader để đọc từ một tệp tin văn bản.

using (StreamReader sr = new StreamReader("path/to/file.txt"))
{
    string content = sr.ReadToEnd();
    Console.WriteLine(content);
}

b. Ghi tệp tin

Để ghi dữ liệu vào một tệp tin, lớp StreamWriter thường được sử dụng.

using (StreamWriter sw = new StreamWriter("path/to/file.txt"))
{
    sw.WriteLine("Hello, World!");
}

3. Làm việc với luồng dữ liệu

Khi làm việc với các luồng dữ liệu, bạn có thể sử dụng lớp FileStream để đọc và ghi dữ liệu ở mức byte.

a. Đọc luồng dữ liệu

using (FileStream fs = new FileStream("path/to/file.dat", FileMode.Open))
{
    byte[] buffer = new byte[fs.Length];
    int bytesRead = fs.Read(buffer, 0, buffer.Length);
    Console.WriteLine(BitConverter.ToString(buffer));
}

b. Ghi luồng dữ liệu

using (FileStream fs = new FileStream("path/to/file.dat", FileMode.Create))
{
    byte[] buffer = { 0, 1, 2, 3, 4, 5 };
    fs.Write(buffer, 0, buffer.Length);
}

4. Xử lý I/O không đồng bộ

Với các chiến lược xử lý I/O không đồng bộ, bạn có thể cải thiện hiệu năng của ứng dụng bằng cách không giữ ứng dụng đợi trong khi I/O hoàn thành. C# hỗ trợ việc này với các phương thức như ReadAsyncWriteAsync.

a. Đọc không đồng bộ

using (StreamReader sr = new StreamReader("path/to/file.txt"))
{
    string content = await sr.ReadToEndAsync();
    Console.WriteLine(content);
}

b. Ghi không đồng bộ

using (StreamWriter sw = new StreamWriter("path/to/file.txt"))
{
    await sw.WriteLineAsync("Hello, async world!");
}

5. Làm việc với JSON

JSON là định dạng phổ biến để truyền dữ liệu, và C# cung cấp thư viện System.Text.Json để xử lý dữ liệu JSON.

a. Đọc JSON từ tệp tin

string jsonString = File.ReadAllText("path/to/file.json");
var jsonData = JsonSerializer.Deserialize<Dictionary<string, object>>(jsonString);
Console.WriteLine(jsonData["key"]);

b. Ghi JSON vào tệp tin

var jsonData = new Dictionary<string, object>
{
    { "key", "value" }
};

string jsonString = JsonSerializer.Serialize(jsonData);
File.WriteAllText("path/to/file.json", jsonString);

Kết luận

Việc xử lý dữ liệu đầu vào và đầu ra trong C# rất linh hoạt và mạnh mẽ. Bằng cách sử dụng các lớp và thư viện được cung cấp bởi .NET Framework, bạn có thể dễ dàng quản lý dữ liệu từ nhiều nguồn và định dạng khác nhau, giúp ứng dụng của bạn trở nên mạnh mẽ và hiệu quả hơn.

Comments