Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以将任意文件转换为字符串?(C#)_C#_Json - Fatal编程技术网

是否可以将任意文件转换为字符串?(C#)

是否可以将任意文件转换为字符串?(C#),c#,json,C#,Json,我需要将任意数量的文件(任何文件类型)存储为类的属性。此类将被序列化为JSON文件。稍后,用户可以将JSON文件加载回应用程序,并能够重新创建最初加载的文件。现在我将文件存储为字节数组。问题是有些文件很大,字节数组太大,导致序列化/反序列化需要很长时间 有没有办法将文件存储为字符串/字符串数组而不是字节?或者以不同的方式存储文件?有什么办法可以解决这个问题 编辑: 我相信字符串会更快,因为现在字节数组以ascii格式以JSON呈现时,它看起来如下所示: 150123,43,62…使用将字节数组编

我需要将任意数量的文件(任何文件类型)存储为类的属性。此类将被序列化为JSON文件。稍后,用户可以将JSON文件加载回应用程序,并能够重新创建最初加载的文件。现在我将文件存储为字节数组。问题是有些文件很大,字节数组太大,导致序列化/反序列化需要很长时间

有没有办法将文件存储为字符串/字符串数组而不是字节?或者以不同的方式存储文件?有什么办法可以解决这个问题

编辑: 我相信字符串会更快,因为现在字节数组以ascii格式以JSON呈现时,它看起来如下所示:
150123,43,62…

使用将字节数组编码为基64字符串。这将大大减少JSON的大小:

例如,下面是一个随机字节数组,序列化为JSON:

[95,103,154,174,23,5,178,179,158,186,181,89,40,229,233,168,217,42,98,65,248]
"X2earhcFsrOeurVZKOXpqNkqYkH4"
这是同一个数组,转换为base 64字符串,序列化为JSON:

[95,103,154,174,23,5,178,179,158,186,181,89,40,229,233,168,217,42,98,65,248]
"X2earhcFsrOeurVZKOXpqNkqYkH4"

显而易见,在JSON中,字节数组在表示为基64字符串时更小。从76个字符到30个字符。

当然不会像那样将字节数组存储为十进制数字;Base64至少对其进行编码。Base64编码会将数据放大到原始文件大小的133%,但这与您当前使用的400%放大相比是一个巨大的改进。

为什么您认为字符串比字节数组小?或者更确切地说,这个字符串会有什么?一个字符串至少是字节数组的两倍大,这取决于所使用的编码。加载大文件需要很长时间,在软件中您无法做很多事情来解决这一问题,所以类似这样的事情?:var horbleway=File.ReadAllBytes(filePath);var goodWay=Convert.ToBase64String(horbleway);当我试着这样做的时候,Thorbleway的尺寸比goodWay小。为什么会发生这种情况?我试过:var horbleway=File.ReadAllBytes(filePath);var goodWay=Convert.ToBase64String(horbleway);我在一个小文件上对此进行了测试,当我查看每个文件的计数时,我发现horrableway=10152,goodWay=13536。发生了什么事?@user3715648您的文件是10kb,但您正在写入json的数据是一个10000个数字的数组。base64应该作为字符串写入。啊,是的。我真傻。最后一件事:如何将此字符串写回文件?是否需要将其转换回字节数组?用于获取字节数组。