zoukankan      html  css  js  c++  java
  • flex sqlite 操作blog 二进制数据

    1,              通常的操作方式:

    首先我们建立表:CREATE TABLE "pages" ("id" varchar, "data" blob),然后了使用sql 语句。

    sql = "SELECT id, CAST(data AS ByteArray) AS data FROM pages"

    flex 的代码如下:

    sql = "SELECT id, CAST(data AS ByteArray) AS data FROM pages"

     1 SQLConnection connection = new SQLConnection();
     2 var file:File = File.applicationDirectory.resolvePath("assetsdbdata.db");
     3 connection.open(file);
     4 
     5 var state:SQLStatement = new SQLStatement();
     6 state.text = sql;
     7 state.sqlConnection = connection
     8 state.execute();
     9 
    10 var result:SQLResult = state.getResult();
    11 var rows:int = result.data.length;
    12 for(var i:int =0; i < rows; i++) 
    13 {
    14     
    15     var row:Object = result.data[i];
    16     var data:ByteArray = row[data];
    17 }

    2,              特殊的处理方式:

    但是了,问题出现了,CAST(data AS ByteArray) AS data 这句,有时候,这个死活转不成bytearray,一直是0。这个问题困扰了我很久,我到adobe官网也查了半天,没有结果,最后找到sqlite 的 hex 函数。即改变sql 语句 SELECT id, hex(data) AS data FROM pages。

    Hex 函数,其实就是把sqlite blob 类型的数据转换为字符串,具体怎么转了,比如是:55ffab这样。 其实每个字符是4个字节, 那55 就表示一个Byte 了,即8字节。所以了,我写两个函数,用来转换hex 为bytearray。

    private function Hex2ByteArrayNew(hexStr:String):ByteArray
    {
        var ret:ByteArray = new ByteArray();
    
        var leng:int = hexStr.length;
        var newHexArrStr:String = "";
        var step:int = 2;
        var i:int = 0;
        
        while(i<leng)
        {
            try
            {
                //2 位一个byte
                var tempI:int = parseInt(hexStr.substr(i,step),16);
                
                ret.writeByte(tempI);
                
                i += step;
            }catch(e:Error)
            {
                trace(e);
            }
        }
        return ret;
    }

    3,              Bytearray 处理的一些技巧

    (1)       刚开始读取的时候,必须设置position = 0。

    (2)       readUnsignedByte, 以及  readDouble ,这些是读取固定字节,转换成相应的数据类型。一般使用这些方法来读取。

  • 相关阅读:
    Shell 字符串处理
    Shell 变量替换及测试
    ARTS(一)
    instanceof & isAssignableFrom的异同
    mysql 分组排序取最值
    guava-retrying 源码解析(阻塞策略详解)
    guava-retrying 源码解析(时间限制策略)
    guava-retrying 源码解析(停止策略详解)
    guava-retrying 源码解析(等待策略详解)
    guava-retrying 源码解析(导入项目)
  • 原文地址:https://www.cnblogs.com/csharponworking/p/3349598.html
Copyright © 2011-2022 走看看