python3.6 java_基于Python3.6实现Java版murmurhash算法

Python3.6 实现java1.8 murmurhash 加密算法

前因后果

由于最近工作涉及到python操作Java项目的缓存问题,而Jedis中默认使用的murmurhash算法与python版本的不互通,后来尝试使用Jpype调用Java代码实现加密,但是迫于强迫症以及减少进程消耗资源,强迫自己调试了一天终于实现python3.6版本的murmurhash并且与Java1.8版本的Jedis中默认的加密算法互通。

以下是初稿代码,验证无误(至少我的实例中没有出现偏差)

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @File : ByteBuffer.py

# @Author: Vam

# @Date : 2020-09-08

# @Desc : 实现java'的ByteBuffer对象有关mmh相关的算法

import ctypes

class ByteBuffer(object):

def __init__(self, buff:bytearray = None, position:int = 0, mark:int = -1, capacity:int = 0, limit:int = 0, order = "BIG_ENDIAN"):

"""

:param buff: buff即内部用于缓存的数组

:param position: 当前读取的位置。

:param mark: 为某一读过的位置做标记,便于某些时候回退到该位置。

:param capacity: 初始化时候的容量。

:param limit: 当写数据到buffer中时,limit一般和capacity相等,当读数据时,limit代表buffer中有效数据的长度。

"""

self.buff = buff or bytearray()

self.position = position

self.capacity = capacity or len(buff)

self.mark = 0

self._limit(limit)

self._position(position)

self._order = order

if mark >= 0:

if mark > position:

raise Exception("IllegalArgumentException:mark:%s, pos:%s" % (mark, position))

self.mark = mark

@classmethod

def long_overflow(cls, val):

maxint = 0x7fffffffffffffff

if not -maxint - 1 <= val <= maxint:

val = (val + (maxint

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值