2016-10-30 8 views
0

キャプチャした指紋画像をSQLite dbにバイト配列として保存しています。SQlite DBから戻ったときにbyte []値が変化する理由[Android]

byte[] template = new byte[....]; 

次に、[B @ 41d25378]のように値を取得して取得します。これは、BLOBカラムのsqlite dbに送信されます。

問題は今、私は私のDBから、この値は、

byte[] photo = cursor.getBlob(cursor.getColumnIndex("fingerprint")); 

を取得するときに私は値と420447f8 @その全く異なる[Bを記録していることであるが、これは私が41d25378 @ [Bを望むものです。したがって、返されているものが異なるので、私は指紋に一致することができません。どのように私は同じバイト[]の値を取得することができます。

私も文字列を使用しようとしましたが、完全一致を返す方法を見つけ出すことができます。ありがとうございました...

+0

この複製方法はどうですか? –

答えて

0

ストリング[[email protected][[email protected]、それを上書きすることなくObject.toString()(及びその後Object.hashCode())を使用するJava byte[]オブジェクトに対して呼び出さtoString()メソッドによって返される値です。 配列の要素の値を表すものではありません。

これは、toString()が返される文字列の接尾辞にhashCode()を使用するため、同じインスタンスではないため異なる点です。

また、メモ:メモリアドレスとは何の関係もありません。 Javaでは、「メモリアドレス」という用語は適用されません。 (割り当てやGCなどのJVM実装の詳細は別として)。

また、これで間違っている:

その後、私は41d25378 @ [Bなどの値を記録してもらいます。これは、BLOBカラムのsqlite dbに送信されます。

いいえ、出力はまだtoString()であり、バイト配列の内容ではありません。どんなに重要な指紋が11バイトより長い必要があります...

おそらく2つの配列(Arrays.compare(arr1,arr2))を比較するか、最初の数バイトの値とその長さをそれらが同じであることを確認してください。

+0

これは、(FPMatch.getInstance()。MatchTemplate(model、GlobalData.getInstance()。userList.get() i).bytes1)> 60){.. do stuff}。共有設定を保存するときは、何かの時間が戻ってくるので、私の試合は100%確実です。しかし、私がデータベースから戻ったとき、構造が変わったので、私の数学は0です。 blobを使用する代わりに使用できますか?それはちょうど問題かもしれません –

+0

あなたがブロブをどのように保存するかは、問題になるかもしれません。コンテンツを保存して再生する場所にコードを追加すると、少なくともその問題は除外される可能性があります。配列の長さを記録すると、何が得られますか?FPマッチングのために:私はこの分野の専門家ではないが、そのコードはOKであるようだ。 – ppeterka

+0

私はちょうどb64に変換して戻って同じ値を出さないようにしました –

-1

恐らく、byte[]というアドレスだけを記録するので、そのオブジェクトは異なる必要があります。それは正常です。 あなたの仕事(画像をSQLiteに保存/読み込み)にはthisコードを使用してみてください。

+0

提案していただきありがとうございますが、ソリューションはほぼ正確に私がやっていたものと同じです –

関連する問題