将Byte[]解析为文件而不保存

本文关键字:文件 保存 Byte | 更新日期: 2023-09-27 17:58:20

我正在查询一个web服务(外部系统),该服务返回一个字节[]。这个字节[]是一个csv文件,我将字节[]作为csv保存到一个临时位置,然后将csv文件解析到数据库。

是否可以直接读取byte[],而不是将文件保存到临时位置,而是将其存储在内存中并将文件内容解析到数据库?

我把Opening byte[]看作一个文件,但没有先把它保存为文件——不确定现在情况是否发生了变化?任何投入都将不胜感激。

将Byte[]解析为文件而不保存

不太容易找到,但标准中有一个CSV解析器。

    public void HandleMycontent(byte[] content)
    {
        using (var stream = new System.IO.MemoryStream(content))
        {
            using (var reader = new StreamReader(stream))
            {
                using (var parser = new Microsoft.VisualBasic.FileIO.TextFieldParser(reader))
                {
                    //parse my csv here
                }
            }
        }
    }

您可以使用MemoryStream类而不是FileStream:

var stream = new MemoryStream(yourByteArray);

您链接到的相关问题是关于在Word中加载它。这与仅在本地解析它非常不同。在这种情况下,只需将其连接到MemoryStreamCsvReader(外部链接):作业完成:

using(var ms = new MemoryStream(theData))
using(var sr = new StreamReader(ms))
using(var reader = new CsvReader(sr)) {
    // read the data...
}

不完全确定这一点,因为在另一端,对象应该按照相同的逻辑进行序列化,但您可以尝试一下:

MemoryStream memoryStream = new MemoryStream();
BinaryFormatter binaryFormatter = new BinaryFormatter();
memoryStream.Write(serializedInstance, 0, serializedInstance.Length);
memoryStream.Seek(0, SeekOrigin.Begin);
string deserializedInstance = (string)binaryFormatter.Deserialize(memoryStream);