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