使用 C# 在 SQLite 数据库中解压缩单个 blob
Decompressing single blob in SQLite DB using C#
在我的 .mbtiles SQLite 数据库中,有一个名为 tile_data
的列,其中包含与正在查询的特定图块相关的信息。
我的应用程序将用户 long/lat 作为输入,然后转换为 tile_row
和 tile_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。