使用 C# 在 SQLite 数据库中解压缩单个 blob

Decompressing single blob in SQLite DB using C#

在我的 .mbtiles SQLite 数据库中,有一个名为 tile_data 的列,其中包含与正在查询的特定图块相关的信息。

我的应用程序将用户 long/lat 作为输入,然后转换为 tile_rowtile_column 等效值,然后通过 SQL 下面查询。

查询(功能齐全,只是为了显示代码)是:

string query =
   String.Format("SELECT tile_data from tiles WHERE zoom_level = {0} AND tile_row = {1} AND tile_column = {2}", ZoomLevel, _merc.TileLat, _merc.TileLong);
   SQLiteCommand command = new SQLiteCommand(query, DbConn);
   SQLiteDataReader reader = command.ExecuteReader();

          while (reader.Read())
                {
                    // ...
                }

结果是 单个 blob 文件,查询 SELECT * 将拉回包含所有数据的单个图块。

tile_data 中的 blob 是我需要访问和使用的压缩 (gzip) 矢量文件,但我不知道如何在我的应用程序中解压缩它。我读过的大多数 gzip 链接都是关于文件压缩并将其输出到 .txt(或类似的),而我希望在不需要外部文件的情况下在内存中使用这些数据。

如何解压缩 blob 并访问内存中的数据,而不是外部文件?

尝试这样的事情

SQLiteDataReader reader = command.ExecuteReader();
while (reader.Read())
{
    using(var file = reader.GetStream(0))
    using(var unzip = new GZipStream(file, CompressionMode.Decompress))
    using(var fileReader = new StreamReader(unzip))
    {
        while(!fileReader.EndOfStream)
        {
            var line = fileReader.ReadLine();
        }
    }
}

根据您的文件具体是什么,您可能需要替换不同类型的 reader。