使用C#在SQLite DB中解压缩单个blob

时间:2016-07-01 12:05:09

标签: c# sqlite gzip

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

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

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

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并访问内存中的数据,而不是外部文件?

1 个答案:

答案 0 :(得分:1)

尝试这样的事情

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();
        }
    }
}

根据您的文件确切内容,您可能需要替换其他类型的阅读器。