面试题答案
一键面试实现思路
- C#异步编程模型:
- 使用
async
和await
关键字实现异步操作。async
用于标记异步方法,await
用于暂停方法执行,直到异步操作完成。例如,在文件读写操作时,使用File.ReadAllBytesAsync
和File.WriteAllBytesAsync
等异步方法,这样主线程不会被阻塞,提高应用程序的响应性。
- 使用
- IO流处理方式:
- 对于文件读取,使用
FileStream
结合BufferedStream
来提高读取效率。在读取字节流后,可以通过MemoryStream
进行中间处理。例如,在读取文件内容时:using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) using (var bufferedStream = new BufferedStream(fileStream)) using (var memoryStream = new MemoryStream()) { await bufferedStream.CopyToAsync(memoryStream); byte[] fileBytes = memoryStream.ToArray(); }
- 对于文件写入,同样使用
FileStream
和BufferedStream
,将处理后的字节流写入文件。例如:using (var fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write)) using (var bufferedStream = new BufferedStream(fileStream)) { await bufferedStream.WriteAsync(processedBytes, 0, processedBytes.Length); }
- 对于文件读取,使用
- 加密算法的选择:
- 可以选择AES(高级加密标准)算法,它是一种对称加密算法,具有较高的安全性和性能。在.NET中,可以使用
System.Security.Cryptography.Aes
类来实现。例如:using (Aes aesAlg = Aes.Create()) { aesAlg.Key = Encoding.UTF8.GetBytes(key); aesAlg.IV = Encoding.UTF8.GetBytes(iv); ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); using (MemoryStream msEncrypt = new MemoryStream()) { using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) { csEncrypt.Write(fileBytes, 0, fileBytes.Length); } byte[] encrypted = msEncrypt.ToArray(); } }
- 解密时则使用
CreateDecryptor
方法进行反向操作。
- 可以选择AES(高级加密标准)算法,它是一种对称加密算法,具有较高的安全性和性能。在.NET中,可以使用
核心代码框架
using System;
using System.IO;
using System.Security.Cryptography;
using System.Threading.Tasks;
public class PriorityFileOperation
{
private const int HighPriority = 1;
private const int MediumPriority = 2;
private const int LowPriority = 3;
// 加密和解密的密钥和IV
private readonly string key;
private readonly string iv;
public PriorityFileOperation(string key, string iv)
{
this.key = key;
this.iv = iv;
}
public async Task ReadFileAsync(string filePath, int priority)
{
byte[] fileBytes;
using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
using (var bufferedStream = new BufferedStream(fileStream))
using (var memoryStream = new MemoryStream())
{
await bufferedStream.CopyToAsync(memoryStream);
fileBytes = memoryStream.ToArray();
}
byte[] decryptedBytes = Decrypt(fileBytes);
// 处理解密后的文件内容
// 这里可以添加具体的业务逻辑
}
public async Task WriteFileAsync(string filePath, byte[] content, int priority)
{
byte[] encryptedBytes = Encrypt(content);
using (var fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write))
using (var bufferedStream = new BufferedStream(fileStream))
{
await bufferedStream.WriteAsync(encryptedBytes, 0, encryptedBytes.Length);
}
}
private byte[] Encrypt(byte[] data)
{
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = Encoding.UTF8.GetBytes(key);
aesAlg.IV = Encoding.UTF8.GetBytes(iv);
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
csEncrypt.Write(data, 0, data.Length);
}
return msEncrypt.ToArray();
}
}
}
private byte[] Decrypt(byte[] data)
{
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = Encoding.UTF8.GetBytes(key);
aesAlg.IV = Encoding.UTF8.GetBytes(iv);
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msDecrypt = new MemoryStream())
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Write))
{
csDecrypt.Write(data, 0, data.Length);
}
return msDecrypt.ToArray();
}
}
}
}
使用示例:
class Program
{
static async Task Main()
{
string key = "1234567890123456";
string iv = "1234567890123456";
PriorityFileOperation operation = new PriorityFileOperation(key, iv);
await operation.ReadFileAsync("test.txt", HighPriority);
byte[] content = System.Text.Encoding.UTF8.GetBytes("Hello, World!");
await operation.WriteFileAsync("test.txt", content, HighPriority);
}
}