gpt4 book ai didi

c# - MySqlDataReader GetBytes 缓冲区问题...

转载 作者:行者123 更新时间:2023-11-29 01:45:36 25 4
gpt4 key购买 nike

我发现了 MySqlDataReader.GetBytes 实现的一个奇怪的怪癖,只是想知道这是否众所周知,因为我似乎无法在网上找到任何关于它的文章。

如果您遵循 SqlDataReader 的代码示例并将其应用于 MySqlDataReader 它不会工作...除非您正在检索的记录中的字节数完全可以被缓冲区整除。因此,例如,如果您在循环的最后一次迭代中并且只剩下 100 个字节,但它正在尝试读取另外 1024 个字节,那么 MySqlDataReader 将失败并抛出异常。 SqlDataReader 不会。

除非我做错了什么?

D.

最佳答案

与其读取整个缓冲区大小,不如只请求最多 缓冲区大小,但也最多只请求您认为剩下的内容。老实说,您最好创建一个大小恰到好处的缓冲区,而不是一个固定大小的缓冲区。

// I assume this works for MySqlDataReader too...
int length = (int)reader.GetBytes(column, 0, null, 0, 0);
byte[] buffer = new byte[length];
int index = 0;

while (index < length)
{
int bytesRead = (int)reader.GetBytes(column, index,
buffer, index, length - index);
index += bytesRead;
}

但是如果你想要一个更小的缓冲区(例如,如果你一次处理一个缓冲区)你可以使用:

int length = (int)reader.GetBytes(column, 0, null, 0, 0);
byte[] buffer = new byte[length];
int index = 0;

while (index < length)
{
int bytesRead = (int)reader.GetBytes(column, index, buffer, 0,
Math.Max(buffer.Length, length - index));
// Process the buffer, up to value bytesRead
// ...
index += bytesRead;
}

关于c# - MySqlDataReader GetBytes 缓冲区问题...,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7703032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com