zookeeper写入数据乱码问题
先来看看现象:这是用工具ZooInspector查看zookeeper上的数据显示的结果,从图中可以看出,数据的前几个字节是乱码。pom.xml中的zookeeper依赖:<!-- zookeeper --><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zoo
·
先来看看现象:
这是用工具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());
这样就不会出现乱码了。
更多推荐
已为社区贡献5条内容
所有评论(0)