BitMap是一串连续的二进制数字(0和1),类似于位数组,每一位所在的位置为偏移量(offset),类似于数组索引,BitMap就是通过最小的单位bit来进行0|1的设置,时间复杂度位O(1),表示某个元素的值或者状态。由于bit是计算机中最小的单位,使用它进行储存将非常节省空间。特别适合一些数据量大的场景。例如,统计每日活跃用户、统计每月打卡数等统计场景。1天记录1000W用户的活跃统计数据,只需要10000000/8/1024/1024 ≈12M。
Redis从220版本开始新增了setbit,getbit,bitcount,bitop等几个BitMap相关命令,虽然是新命令,但是并没有增加新的数据类型,它还是属于String类型。Redis中的BitMap最大占用内存大小限制在512M之内,即2^32。
设置某个key的指定偏移量的value值为0或者1,key不存在时自动生成一个新的字符串值,字符串会进行伸展,该偏移量前面的位值默认为0,偏移量offset参数必须大于等于0,小于2^32。
时间复杂度:O(1)
返回值:指定偏移量存储的值
示例:
获取key指定偏移量上的值,当key不存在时,返回0。
时间复杂度:O(1)
返回值:指定偏移量上存储的值
示例:
统计给定key中,被设置为1的比特位的数量,可以通过start和end参数设置范围。
时间复杂度:O(n)
返回值:key中被设置为1的数量
示例:
对一个或多个key进行位 *** 作,并将结果保存到destkey上。 *** 作方式可以是AND、OR、NOT、XOR这四种,除了NOT *** 作之外,其他 *** 作可接收多个key。
时间复杂度:O(n)
返回值:保存到destkey的字符串的长度
示例:
签到需求:
之前的应用都是统计总数,但如果业务需要,有时也可能需要获取用户ID,来做下一步 *** 作。
Bitmap是Android系统中的图像处理的最重要的类之一。用它可以获取图像文件信息,对图像进行旋转,剪切,放大,缩小等 *** 作。
Bitmap代表一张位图,使我们在开发中常用的资源,下面就对Bitmap进行简单的介绍。
Bitmap的获取方法:
1、使用BitmapDrawable
BitmapDrawable里封装的就是一个Bitmap对象,我们要把Bitmap包装成BitmapDrawable对象,可以调用BitmapDrawable的构造方法:
BItmapDrawbale drawable = new BItmapDrawable(bitmap);
如果要获取BitmapDrawable所包装的Bitmap对象,则可调用BitmapDrawable的getBitmap()方法:
Bitmap bitmap = drawbalegetBitmap();
2、Bitmap提供了一些静态方法来创建Bitmap对象(仅列举几个):
createBitmap(Bitmap source,int x,int y,int width,int height):从原位图source的指定坐标(x,y)开始,从中挖取宽width,高heigtht的一块出来,创建新的Bitmap对象。
createScaledBitmap(Bitmap source,int width,ing height,boolean fliter):对源位图进行缩放,缩放称宽width,高heigth的新位图。
createBitmap(int width,int height,BitmapConfig config):创建一个宽width,高height的可变的新位图。
createBitmap(Bitmap source, int x,int y,int width,int height ,Matrix m,boolean fliter):从源位图source的指定坐标(x,y)开始,挖取宽width,高height的一块来,创建新的Bitmap对象,并按照Matrix指定的规则进行变换。
3、通过对资源文件的解析获取Bitmap对象
在这里就要用到BitmapFactory这个工具类,提供的方法如下:
decodeByteArray(byte[] data, int offset,int length):从指定字节数组的offset位置开始,将长度为length的字节数据解析成Bitmap对象。
decodeFIle(String pathName):从pathName指定的文件中解析、创建Bitmap对象。
decodeFileDescriptor(FileDescriptor fd):用于从FileDescriptor对应的文件中解析、创建Bitmap对象。
decodeResource(Resource res,int id):用于根据给定的资源ID从指定的资源文件中解析、创建Bitmap对象。
decodeStream(InputStream is):用于从指定输入流中介解析、创建Bitmap对象。
但是,在系统不断的解析、创建Bitmap的过程中,可能会由于内存小或其他原因,导致程序运行时发生OutOfMemory错误。
为此,Android为Bitmap提供了内存回收方法:
void recycle():强制回收Bitmap对象。
还有用于判断Bitmap 对象是否被回收的方法:
boolean isRecycle();
如果Android应用需要访问系统相册,都需要借助BitmapFactory解析、创建Bitmap对象。
4 从安卓无忧中看bitmap的几种例子,下面是加载bitmap的例子,可以看里面的源码:
如果您对答案满意,请您关注一下名字中微博。
ID是在资源模块中来管理资源内容的。你已经得到了资源内容,再给它赋一个ID是没有意义的。况且也没有API来执行这个 *** 作。
每个包含资源的模块,都有一个资源记录表,通过ID匹配到资源数据的地址。所以咱们使用资源的时候,知道ID就行了。
以上就是关于Redis中BitMap技术简介及应用全部的内容,包括:Redis中BitMap技术简介及应用、怎么给bitmap赋值 android、MFC 给Bitmap对象指定ID等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)