Java 从BLOB文件S-Health恢复数据

Java 从BLOB文件S-Health恢复数据,java,android,sqlite,blob,Java,Android,Sqlite,Blob,我试图从三星S-health SDK获取的blob文件中获取数据。 我实际上做的是: Cursor c = null; int i = 0; c = result.getResultCursor(); if (c != null) { while ( c.moveToNext() ) { byte[] live_data = c.getBlob( c.getColumnIndex( HealthConstants.Exercise.LIVE_DATA ) );

我试图从三星S-health SDK获取的blob文件中获取数据。 我实际上做的是:

Cursor c = null;
int i = 0;
c = result.getResultCursor();

if (c != null) {
    while ( c.moveToNext() ) {
        byte[] live_data = c.getBlob( c.getColumnIndex( HealthConstants.Exercise.LIVE_DATA ) );
        if ( live_data != null ) {

            // Do something with data.


        } else {
            Log.d(APP_TAG, "there is no live data.");
        }
    }
} else {
    Log.d(APP_TAG, "There is no result.");
}
“live_data”是一个压缩文件,其中包含一个包含所有数据的json。 我试着用ZipInputStream解压,但没有成功。
怎么办?

经过几次尝试,我终于找到了解决方案。 问题是blob文件是gzip文件。 下面是解压缩字节数组的简单代码(在我的例子中是live_数据):

其中,outStr是我想要检索的文件的内容,live_数据是blob字节数组。 我希望这也能对其他人有所帮助。


你试过用WinRar解压BLOB文件吗? 我尝试了很多天,最后我把扩展名改成了.rar,然后我得到了10倍大的明文和数据样本(例如:{“卡路里”:0.0,“距离”:0.0,“心率”:89.0,“开始时间”:1521297002178},)

我有S-Health 5.16.0.043和更旧的DataViewer1.2.0.apk

ByteArrayInputStream inputStream = new ByteArrayInputStream(live_data);
GZIPInputStream gzipInputStream = new GZIPInputStream(inputStream);
BufferedReader bf = new BufferedReader(new 
InputStreamReader(gzipInputStream, "UTF-8"));
String outStr = "";
String line;
while ((line=bf.readLine())!=null) {
     outStr += line;
}