redis的bitmap数据怎么转成java的BitSet 5C

例如执行一下语句:
redisDao.setBit(key2, 1, true);
redisDao.setBit(key2, 2, true);
redisDao.setBit(key2, 8, true);
redis 存储数据如下:

// 2进制 0110 0000 1000 0000
// 16进制 6 0 8 0
使用下面语句转换:

BitSet.valueOf( redisDao.getValue(key2).getBytes())
发现不正确,请问该怎么转换?

1个回答

redis存储的结构是从左到右
java的BitSet事从右到左
public static BitSet fromByteArrayReverse(final byte[] bytes) {
final BitSet bits = new BitSet();
for (int i = 0; i < bytes.length * 8; i++) {
if ((bytes[i / 8] & (1 << (7 - (i % 8)))) != 0) {
bits.set(i);
}
}
return bits;
}
可以试下转换

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Redis用bitset(bitmap)来统计日活跃量

假设这样一个场景,假如每个网站有1亿的用户,那么我们怎么来统计这个网站的日登陆数或者说有哪些用户登录过这个网站。 最常见的做法就是设计一张用户登录表: user_login: user_uid    login_date 0                   2017-7-1 1                   2017-7-1 0                   2017-

Java中BitSet的实现

编程珠玑中第一篇讲的就是使用bitmap来排序大文件里面的数据。下面给出一个简单的BitMap实现。 主要使用Byte数组。主要就是使用位运算来设置为某位的bit为1;   Java代码   public class BitMap {              private byte[] bitMap = null;

java使用redis进行位图法统计活跃用户

位图法

Redis中bitmap的妙用

转载自:https://segmentfault.com/a/1190000008188655在Redis中我们经常用到set,get等命令,细心的你有没有发现,还有几个相似的命令叫setbit,getbit,它们是用来干嘛的?BitMap是什么就是通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身。我们知道8个bit可以组成一个Byte,所以bitmap本身会极大的节省...

分布式缓存Redis之bitmap、setbit

写在前面  本学习教程所有示例代码见GitHub:https://github.com/selfconzrr/Redis_Learning基本语法:1)SETBITredis 127.0.0.1:6379> setbit KEY_NAME OFFSET VALUE //该命令用于对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。时间复杂度O(1)  在redis中,存储的字符串都是

Redis BitMap适应场景

Bitmap以及Redis Bitmaps快速入门(Crash Course on Bitmap and Redis Bitmaps) Bitmap(即Bitset)     Bitmap是一串连续的2进制数字(0或1),每一位所在的位置为偏移(offset),在bitmap上可执行AND,OR,XOR以及其它位操作。 位图计数(Population Count)     位图

海量数据取交集、并集-bitmap VS Redis

昨天在《程序的那些事》上看到一个bitmap算法,漫画:什么是 Bitmap 算法?非常有意思。 有这样一个需求,一个社交论坛,用户数量在千万级别,每个用户都有不同的标签,而标签的种类有上千种,为了方便找出每一种标签对应的用户,以及共同拥有相同几种标签的人。数据存储结构采用 标签:用ID,例如: 90后: 1,3,5,7.   研究生:3,7,10,30 这样的结构。 但实际运算的时候,只是把

redis 用setbit(bitmap)统计活跃用户

Redis支持对String类型的value进行基于二进制位的置位操作。通过将一个用户的id对应value上的一位,通过对活跃用户对应的位进行置位,就能够用一个value记录所有活跃用户的信息。如下图所未,下图中的bitmap有9个位被置为1,表示这9个位上对应的用户是今天的活跃用户。其中第15位表示uid为15的用户,第一位表示uid为0的用户。(如果你的uid不是从1开始的,比如从100000

Java中BitSet的使用及详解

一. Bitset 基础 Bitset,也就是位图,由于可以用非常紧凑的格式来表示给定范围的连续数据而经常出现在各种算法设计中。上面的图来自c++库中bitset的一张图。 基本原理是,用1位来表示一个数据是否出现过,0为没有出现过,1表示出现过。使用用的时候既可根据某一个是否为0表示此数是否出现过。 一个1G的空间,有 8*1024*1024*1024=8.58*10^9bit,也就是可以

bitmap思想及其在java中的相关实现

先看一个题目:给你一堆西安市的电话号码列表,数量大概在千万级,要求从中找出所有重复的电话号码,需要时间复杂度尽可能小。目前西安市的电话号码大概都以8开头,为8位,也就是类似于82678578这样子二重暴力搜索时间复杂度太高,这里我们不予考虑。容易想到的办法就是建立一个标志数组,int boolean都行,用相应的位置值来代替这个号码是否出现,根据数组的可直接存取特性,来提高效率。但是你是否想过或测试过int[] a = new int[100000000];boolean[] a = new boolean

使用 Redis Bitmap 实现用户上线次数统计

Bitmap 对于一些特定类型的计算非常有效。假设现在我们希望记录自己网站上的用户的上线频率,比如说,计算用户 A 上线了多少天,用户 B 上线了多少天,诸如此类,以此作为数据,从而决定让哪些用户参加 beta 测试等活动 —— 这个模式可以使用 SETBIT 和 BITCOUNT 来实现。比如说,每当用户在某一天上线的时候,我们就使用 SETBIT ,以用户名作为 key ,将那天所代表的网站的上

海量数据去重排序--bitmap(位图法)在java中的实现的两种方法

在海量数据中查找出重复出现的元素或者去除重复出现的元素是面试中常考的文图。针对此类问题,可以使用位图法来解决。例如:已知某个文件内包含若干个电话号码,要求统计不同的号码的个数,甚至在O(n)时间复杂度内对这些号码进行排序。位图法需要的空间很少(依赖于数据分布,但是我们也可以通过一些放啊发对数据进行处理,使得数据变得密集),在数据比较密集的时候效率非常高。例如:8位整数可以表示的最大十进制数值为999

BitSet的原理解析

BitSet 类实现了一个按需增长的位向量。位 set 的每个组件都有一个boolean值。用非负的整数将BitSet的位编入索引。可以对每个编入索引的位进行测试、设置或者清除。通过逻辑与、逻辑或和逻辑异或操作,可以使用一个BitSet修改另一个BitSet的内容。 默认情况下,set 中所有位的初始值都是false。 每个位 set 都有一个当前大小,也就是该位 set 当前所用空

使用Redis bitmap进行活跃用户统计

本文来自Spool的开发者博客,描述了Spool利用Redis的bitmaps相关的操作,进行网站活跃用户统计工作。 Redis支持对String类型的value进行基于二进制位的置位操作。通过将一个用户的id对应value上的一位,通过对活跃用户对应的位进行置位,就能够用一个value记录所有活跃用户的信息。如下图所未,下图中的bitmap有9个位被置为1,表示这9个位上对应的用户是今天的活跃

介绍 redis-Bit-Map 的相关命令和常用场景

介绍 redis-Bit-Map 的相关命令和常用场景 相关命令(5种) SETBIT key offset value设置 key offset 偏移位置 value 0 或 1 GETBIT key offset获取置 key offset 偏移位置 的 value 返回 0 或 1 BITCOUNT key [start end]获取 key 的 value 为1 的总数 , [sta

利用bitset将整数转化为二进制

bitset b(5);

java.util.BitSet 研究(存数海量数据时的一个途径)

java.util.BitSet可以按位存储。 计算机中一个字节(byte)占8位(bit),我们java中数据至少按字节存储的, 比如一个int占4个字节。 如果遇到大的数据量,这样必然会需要很大存储空间和内存。 如何减少数据占用存储空间和内存可以用算法解决。 java.util.BitSet就提供了这样的算法。 比如有一堆数字,需要存储,source=[3,5,6,9] 用int

使用bitset实现二进制和十进制的相互转换

#include #include #include #include #include #include using namespace std; const int Size = 32; const double log_2 = log(2.0); char str[Size]; int main(void) { int num; char *endstr; while (~scan

Bitset(进制转换)

Problem Description Give you a number on base ten,you should output it on base two.(0   Input For each case there is a postive number n on base ten, end of file.   Output For each case output

roaringbitmap 源码(4)序列化和反序化以及分布式应用

迭代器和序列化和反序列化serialize:都很简单。 ArrayContainer@Override public void serialize(DataOutput out) throws IOException { out.writeShort(Short.reverseBytes((short) this.cardinality)); // little endian for

redis bitmap实现签到

Bitmap 对于一些特定类型的计算非常有效。 假设现在我们希望记录自己网站上的用户的上线频率,比如说,计算用户A上线了多少天,用户B上 线了多少天,诸如此类,以此作为数据,从而决定让哪些用户参加beta测试等活动——这个模式可以使 用SETBIT和BITCOUNT来实现。 比如说,每当用户在某一天上线的时候,我们就使用SETBIT,以用户名作为key,将那天所代表的网站 的上线日作为o

java图像处理——图像读取,二值化转bitset

最近要处理一些新闻中的广告图片,其中比较多的是含二维码的图片。简单写了3种逻辑处理了下(同源不同内容,同图片;含完整二维码的图片;残缺二维码广告图片),基本达到了实际需求。有同样需求的可以参考下,言归正传,今天看到有读者问java图像怎么转bitset,下面举例一些我的处理方法。 首先图片有不同来源,有的是url,那么url首先读取成BufferedImageURL url_url = new U

java的BitSet实现位排序算法,复杂度为O(n)

今天小树用Java语言写了个位排序算法,算法复杂度为O(n).import java.util.*;public class BitSort { public static void main(String[]args){ final int size=10; int A[]={23,44,1,2,34,56,11,7,9,25}; bitSo

bitset和字符数组的转换

#include &amp;lt;iostream&amp;gt;#include &amp;lt;bitset&amp;gt;#include &amp;lt;algorithm&amp;gt;#include &amp;lt;fstream&amp;gt;using namespace std;//c为字符串的首地址,n为字符串长度void prt(char * c, int n){    bitset&amp;lt;40&amp;gt; bitset4;    int ...

C++基础——bitset与string的相互转化

bitset类模板提供了非常直接的接口进行与string类型数据的转换。然而一些需要注意的细节又是非常繁琐。 具体如何繁琐,以及如何化繁为简,且看下文分解。

将输入流(InputStream)转换为位图(Bitmap)

InputStream is = null; ... Bitmap bitmap = BitmapFactory.decodeStream(is); ImageView imageView = (ImageView) findViewById(R.id.image_view); imageView.setImageBitmap(bitmap);

Redis整理(3)之bitmap的应用

场景分析:如果叫你设计一个表,存放了userID和性别或者是账户存在状态。 userID  sex  status 1            0      1 2            1      1 3            1      1 ....... 一般思路用数据库关系表的话,也还OK,但是如果这个表很大,上亿级别? 这时候可以考虑用redis中的bitmap来轻易解决

RGB转化成bitmap格式

ask: I have a buffer of RGB unsigned char that I would like converted into a bitmap file, does anyone know how? My RGB float is of the following format R [(0,0)], G[(0,0)], B[(0,0)],R [(0,1)]

从本地或者网络读取图片,并转换为Bitmap图片

在做android项目时,我们经常需要从本地或者网络读取图片,并转换为Bitmap图片,以便使用,下面是读取本地图片并转换的方法: Java代码   /**       * 得到本地或者网络上的bitmap url - 网络或者本地图片的绝对路径,比如:       *        * A.网络路径: url=&quot;http://blog.foreverlov

使用BitSet对1000万个Int整数进行排序

//因为BitSet中可以存true/false,而且是按位存储,所以在数据量很大的时候,合理的使用BitSet可以节省很大的内存空间, //提高程序的运算效率。 // 下面是我使用Bitset和Arrays工具类进行排序的测试类 public class BitSetSort { public static void main(String[] args) { // Stri

bitmap转byte[]裸数据,并把ARGB_8888转化成RGB_565

public byte[] bitmap2RGB(Bitmap bitmap) { if (bitmap == null) { return null; } bitmap.getPixels(bitmap_data, 0, width, 0, 0, width, height); for (int i

BitSet 设置及取值 求交集和求并集

package Datess; import java.util.Arrays; import java.util.BitSet; public class BitSetDemo { public static void main(String[] args) { BitSet bm = new BitSet(); bm.set(1); bm.set(2); /*

Java 版本 Redis 统计7天连续在线用户人数

import java.util.BitSet; import redis.clients.jedis.Jedis; public class SetBitTest3 { /* public int uniqueCount(Jedis redis,String action, String date) {    String key = action + ":" +

Bitmap转换为字节码/输出流

ByteBuffer buf = ByteBuffer.allocate(bitmap.getWidth() * bitmap.getHeight() * 4); bitmap.copyPixelsToBuffer(buf);

图片文件和Bitmap之间的转换

图片文件转为Bitmap对象String filePath="c:/01.jpg";Bitmap bitmap=BitmapFactory.decodeFile(filePath);如果图片过大,可能导致Bitmap对象装不下图片 解决String filePath="c:/01.jpg"; Bitmap bitmap=BitmapFactory.decodeFile(filePath,getBi

redis:存储与计算:日活,留存,老用户等统计数据

 一.实战之前,先介绍一个概念bitmap 这个bitmap有啥用? 看这副图片,假如更精简的话,只有2个颜色,黄色和透明,1代表黄色,0代表没有颜色,是不是,只要你找到哪个点,看一下是1还是0就知道颜色了呢 二.bitmap在统计中的应用 下面,我将讲解如何用bitmap原理来存储日活数据 思路:把每一天,当做一个图,谁访问了,就在哪个点上,设置1

Android中Bitmap对象和字节流之间的相互转换

android 将图片内容解析成字节数组,将字节数组转换为ImageView可调用的Bitmap对象,图片缩放,把字节数组保存为一个文件,把Bitmap转Byte import java.io.BufferedOutputStream;   import java.io.ByteArrayOutputStream;   import java.io.File;   import java.io.F

Bitset类总结

1 void and(BitSet bitSet) 对此目标位 set 和参数位 set 执行逻辑与操作。 2 void andNot(BitSet bitSet) 清除此 BitSet 中所有的位,其相应的位在指定的 BitSet 中已设置。 3 int cardinality( ) 返回此 BitSet 中设置为 true 的位数。 4 void

图片(bitmap)转化为byte[],并上传到服务器

/** * 压缩bitmap * * @param bitmap * @return */ private Bitmap compressBitmap(Bitmap bitmap) { // 创建操作图片用的matrix对象 Matrix matrix = new Matrix(); matr

将字符串转换成Bitmap类型 或者 将Bitmap转换成字符串

public static Bitmap stringtoBitmap(String string) { // 将字符串转换成Bitmap类型 Bitmap bitmap = null; try { byte[] bitmapArray; bitmapArray = Base64.decode(string, Base64.DEFAULT); bitmap = BitmapFactor

将bitmap转为File文件

public void saveBitmapFile(Bitmap bitmap) { File file = new File("storage/emulated/legacy/s.jpg");//将要保存图片的路径 try { BufferedOutputStream bos = new BufferedOutputStream(new FileOutputS

Go语言实现位图排序(bitmap)

Go语言提供了byte类型,一个byte对应8个位,所以转换一下就可以实现位图了。     代码:     package main //author:xcl //date:2014-1-25 import ( "fmt" ) func main() { arrInt32 := [...]uint32{5, 4, 2, 1, 3, 17, 13} var arrMax uint3

android输入流转换为Bitmap

内容是下边的@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); ContentResolver resolver = getContentResol

Java BitSet(位集)

原理简介:         Java平台的BitSet用于存放一个位序列,如果要高效的存放一个位序列,就可以使用位集(BitSet)。由于位集将位包装在字节里,所以使用位集比使用Boolean对象的List更加高效和更加节省存储空间。         BitSet是位操作的对象,值只有0或1即false和true,内部维护了一个long数组,初始只有一个long,所以BitSet最小的size

读取本地路径转换成bitmap的方法,以及避免outmemory

1、将图片转化为缩略图再加载:  [java] view plaincopy BitmapFactory.Options options = new BitmapFactory.Options();      options.inSampleSize = 2;      Bitmap img = BitmapFactory.decodeFil

BitSet的使用场景及简单示例

BitSet简介     类实现了一个按需增长的位向量。位 set 的每个组件都有一个boolean值。用非负的整数将BitSet的位编入索引。可以对每个编入索引的位进行测试、设置或者清除。通过逻辑与、逻辑或和逻辑异或操作,可以使用一个BitSet修改另一个BitSet的内容。     默认情况下,set 中所有位的初始值都是false。     每个位 set 都有一个当前大小,也就是该位

bitmap实现大数据排序和去重

要点:假如有10亿元素,全部数据读进内存,占用 1000000000 * 4 / 1024 / 1024 /1024 ≈ 3.725 G,爆炸!解决方法:bitmap算法,每一位都能表示一位数字,10000000000 / 8 / 1024 / 1024 / 1024 ≈ 0.116 G,节约了31倍的空间!代码:#define SIZEBIT 1000000000 #define SIZE ...

bitset的用法与数的二进制存储

正数和0用原码存储,最高一位为符号位,负数为1,正数和0为0,负数在计算机用补码表示,就为原码取反(符号位除外)再加1,或者也可以先+1,再取反。c++的stl中的bitset很方便用例解决有关二进制的问题,它是一个二进制数组。代码如下:   #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;limits.h&amp;gt; void dec_to_bin(int n){ ...

java 10进制与16进制的转换

10->16 BigInteger n = new BigInteger("3726802518"); System.out.println(n.toString(16)); 16->10 BigInteger n2 = new BigInteger("DE227E56", 16); System.out.println(n2.toString());

C++基础——简单而强大的bitset

本文covers: 1. 如何理解bitset的真正内涵? 2. bitset存在哪些构造函数,成员方法? 3. 一些简单应用。

相关热词 c#设计思想 c#正则表达式 转换 c#form复制 c#写web c# 柱形图 c# wcf 服务库 c#应用程序管理器 c#数组如何赋值给数组 c#序列化应用目的博客园 c# 设置当前标注样式
立即提问