gpt4 book ai didi

c# - 将 sbyte[,] 存储到磁盘并返回的最佳方法是什么

转载 作者:太空宇宙 更新时间:2023-11-03 21:15:17 24 4
gpt4 key购买 nike

<分区>

我想使用尽可能少的空间在我的磁盘上存储一个 sbyte[,](虽然保存或加载时间不能超过几秒钟)并在稍后取回它。

我无法将其序列化为 xml:无法序列化 System.SByte[,] 类型的对象。不支持多维数组。

而且我无法将其转换为 MemoryStream:无法从“sbyte[,]”转换为“int”

除了创建一个文本文件并逐段循环播放外……还有哪些选项。

如果它有任何不同,数组的大小可以超过 100 000 x 100 000。该文件还需要可供不同的操作系统和计算机使用。


更新。

我将数组展平为一维 sbyte[],然后将 sbyte[] 转换为流并将其与单独的文件一起保存到磁盘包含维度。

Stream stream = new MemoryStream(byteArray);

将其用作将流保存到磁盘的基础。 https://stackoverflow.com/a/5515894/937131

这是我为展平和反展平而写的测试用例,如果其他人觉得它有用的话。

[TestMethod]
public void sbyteTo1dThenBack()
{
sbyte[,] start = new sbyte[,]
{
{1, 2},
{3, 4},
{5, 6},
{7, 8},
{9, 10}
};

sbyte[] flattened = new sbyte[start.Length];
System.Buffer.BlockCopy(start, 0, flattened, 0, start.Length * sizeof(sbyte));

sbyte[,] andBackAgain = new sbyte[5, 2];
Buffer.BlockCopy(flattened, 0, andBackAgain, 0, flattened.Length * sizeof(sbyte));

var equal =
start.Rank == andBackAgain.Rank &&
Enumerable.Range(0, start.Rank).All(dimension => start.GetLength(dimension) == andBackAgain.GetLength(dimension)) &&
andBackAgain.Cast<sbyte>().SequenceEqual(andBackAgain.Cast<sbyte>());

Assert.IsTrue(equal);
}

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