gpt4 book ai didi

c# - BinaryReader,按 block 读取,ArgumentException,偏移量和长度超出范围

转载 作者:行者123 更新时间:2023-12-02 21:42:05 25 4
gpt4 key购买 nike

我的流有 1467 字节,一个 block 有 489 字节,地址是 978,我想要一个 block 。所以它是流中的最后一个 block [从 978 到文件末尾]但我给出了这个异常(exception):偏移量和长度超出了数组的范围,或者计数大于从索引到源集合末尾的元素数量。

但是为什么呢?从978到1467是489字节,我尝试从978读取489字节,那么为什么会抛出这个异常?

这是我的代码。

public List<Block<T>> ReadBlock(int address)
{
var result = new List<Block<T>>();
using (var br = new BinaryReader(new FileStream(FilePath, FileMode.OpenOrCreate, FileAccess.Read),Encoding.Default))
{
var buffer = new byte[BlockSize];
br.Read(buffer, address, BlockSize);

if (buffer.Sum(item => item) == 0)
{
result.Add(new Block<T>());
}
else
{
var block = new Block<T>();
block.Deserialize(buffer);
result.Add(block);
}
}
return result;
}

最佳答案

这是因为地址缓冲区中的起点。

所以你的缓冲区长度是489,但你试图从索引978(越界)开始填充它

在填充缓冲区之前,您需要使用 Seek 移动到偏移量(地址)

var buffer = new byte[BlockSise];

// go to offset address
br.BaseStream.Seek(address, SeekOrigin.Begin);

// fill buffer from starting at address to address + BlockSise
br.Read(buffer, 0, BlockSise);

这将从地址开始用BlockSize字节填充缓冲区

关于c# - BinaryReader,按 block 读取,ArgumentException,偏移量和长度超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20229718/

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