欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

zookeeper写入数据乱码问题

程序员文章站 2022-03-26 16:49:29
先来看看现象:这是用工具ZooInspector查看zookeeper上的数据显示的结果,从图中可以看出,数据的前几个字节是乱码。pom.xml中的zookeeper依赖: org.apache.zookeeper zookeeper......

 

      先来看看现象:

zookeeper写入数据乱码问题

这是用工具ZooInspector查看zookeeper上的数据显示的结果,从图中可以看出,数据的前几个字节是乱码。

 

pom.xml中的zookeeper依赖:

       <!-- zookeeper -->
	    <dependency>
		     <groupId>org.apache.zookeeper</groupId>
		     <artifactId>zookeeper</artifactId>
		     <version>3.4.12</version>
	 	</dependency>
		<dependency>
		    <groupId>org.apache.curator</groupId>
		    <artifactId>curator-recipes</artifactId>
		    <version>4.0.1</version>
		</dependency>
		
		<dependency>
		    <groupId>com.101tec</groupId>
		    <artifactId>zkclient</artifactId>
		    <version>0.10</version>
		</dependency>

而写入数据代码如下:

public ZkClient zk = new ZkClient(zkAddr);

if(!zk.exists("/abc/servers")){
			zk.createPersistent("/abc/servers", true);
}

zk.writeData("/abc/servers", data);

无论写入的数据是否是中文,都会出现乱码。

 

解决的方法:

新建一个MyZkSerializer类,实现了ZkSerializer接口,里面的内容如下:

public class MyZkSerializer implements ZkSerializer
{
	 	@Override
	    public Object deserialize(byte[] bytes) throws ZkMarshallingError {
	        	return new String(bytes, Charset.forName("UTF-8"));
	    }
	 	
	    @Override
	    public byte[] serialize(Object serializable) throws ZkMarshallingError {
	        	return ((String)serializable).getBytes(Charset.forName("UTF-8"));
	    }
}

然后在client写入数据之前,添加一行代码:

zk.setZkSerializer(new MyZkSerializer());

这样就不会出现乱码了。

本文地址:https://blog.csdn.net/qq_32523587/article/details/109561948

相关标签: zookeeper