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

本文关键字:单个 blob 数据库 SQLite 使用 | 更新日期: 2023-09-27 17:54:00

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

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

查询(功能齐全,只是为了显示代码)是:
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。

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

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

使用c#在SQLite数据库中解压单个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();
        }
    }
}

根据您的文件类型,您可能需要替换不同类型的阅读器。