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