android blob,Android中Sqlite中Blob及Parcel的使用

1.从图片文件生成Bitmap对象,再将对象转换成字节数组存入数据库,与直接将文件转换成字节数组再存入数据库不同,前者包含的信息远大于后者。文件到字节数组直接通过FileInputStream,而Bitmap对象到字节数组需通过Parcel序列化,从数据库的字节数组到文件或Bitmap对象与其对应的方法相反。

2.Blob在数据库中是一种无类型,任何文件或对象都可转换成字节数组存入数据库,但文件的存入对应文件的读取,对象的存入对应对象的读取。

----------------------------------代码------------------------------------------------------

数据库的使用:

public class TestSeedDB {

private SQLiteDatabase mTestDatabase = null;

private static final String TABLE_SEED = "TBseed";

// 打开数据库

public void open() {

this.mTestDatabase =

SQLiteDatabase.openOrCreateDatabase(

SQLiteBase.SDPATH

+ "my.db3", null);

}

// Close the database

public void close() {

mTestDatabase.close();

}

public void CreateSeedTable() {

mTestDatabase.execSQL("create

table TBseed (ID integer primary key autoincrement,"

+

"ToyID TEXT,"

+

"ToySeed BLOB,ToyMemo varchar(50))");

}

public void insertSeedItem(long ToyID, byte[] ToySeed) {

String sqlstr = "insert into "

+ TABLE_SEED+ " (ID, ToyID , ToySeed, ToyMemo) values

(?,?,?,?)";

Object[] args = new Object[] {

100, ToyID + "", ToySeed, "aa" };

mTestDatabase.execSQL(sqlstr,

args);

}

public byte[] GetSeedItem(long ToyID) {

Cursor cur;

byte[] strSeed = null;

String col[] = { "ID", "ToyID",

"ToySeed", "ToyMemo" };

cur =

mTestDatabase.query(TABLE_SEED, col, null, null, null,null,

null);

cur.moveToFirst();

strSeed =

cur.getBlob(2);//得到第二列

if (cur != null)

cur.close();

return strSeed;

}

}

---------------------------------对象存入------------------------------------------------------

public byte[] Bitmap2Bytes() {

Bitmap bit =

BitmapFactory.decodeFile(SDPATH + "test.PNG");

Parcel p =

Parcel.obtain();

bit.writeToParcel(p, 0);

return

p.marshall();//Parcel自带的函数,自己写同样能实现,但效率不高

}

public Bitmap Bytes2Bimap(byte[] bt) {

Parcel pp =

Parcel.obtain();

pp.unmarshall(bt , 0,

bt.length);

System.out.println(pp.dataPosition()); pp.setDataPosition(0);

Bitmap bit =

Bitmap.CREATOR.createFromParcel(pp);

return bit;

}

public void saveMyBitmap(String bitName, Bitmap mBitmap) {

//将Bitmap对象写到SD卡,但会有文件数据部分丢失

File f = new File("/sdcard/" +

bitName + ".png");

try {

f.createNewFile();

FileOutputStream fOut = new

FileOutputStream(f);

mBitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);

fOut.flush();

fOut.close();

} catch (Exception e) {

}

}

----------------------------------------文件存入-----------------------------------------------

public byte[] Bitmap2Bytes() {//将文件转换成字节数组

try {

FileInputStream is;

File file =new File(SDPATH +

"test.PNG");

is = new

FileInputStream(file);

byte[] buf =new byte[(int)

file.length()];

//ByteArrayInputStream os = new

ByteArrayInputStream();

Bitmap bit =

BitmapFactory.decodeStream(is);

is.read(buf);

return buf;

} catch (Exception e)

{

// TODO

Auto-generated catch block

e.printStackTrace();

}

return null;

}

//将字节数组转换成文件

FileOutputStream fOut = new

FileOutputStream("/sdcard/aaaa" + ".png");

fOut.write(bt);

注:bt的类型是字节数组,FileInputStream的read和FileOutputStream的write都是相对数据流而言的

前者是有损的,后者文件转换前后无变化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值