zookeeper报错: org.I0Itec.zkclient.exception.ZkMarshallingError: java.io.EOFException

主要因为是没有序列化。

可以使用默认的序列化类。如下所示:

  zkClient.setZkSerializer( new SerializableSerializer());

但是使用默认的SerializableSerializer()查看节点数据时,有可能会出现乱码。

我们可以通过实现ZkSerialized接口来自定义序列化类。

首先在pom.xml中添加依赖包guava,如下所示:

   <dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>25.1-jre</version>
</dependency>

自定义序列化类,如下:

public class MyZkSerializer implements ZkSerializer {
/**
* 序列化,将对象转化为字节数组
*/
public byte[] serialize(Object obj) throws ZkMarshallingError {
return String.valueOf(obj).getBytes(Charsets.UTF_8);
} /**
* 反序列化,将字节数组转化为UTF_8字符串
*/
public Object deserialize(byte[] bytes) throws ZkMarshallingError {
return new String(bytes, Charsets.UTF_8);
}
}

接下来只要设置序列化方式就可以了。

zkClient.setZkSerializer(new MyZkSerializer()); 

如下所示:

/**
* 获取节点数据
*/
public class PathData {
private static Logger logger=Logger.getLogger(PathData.class); public static void main(String[] args) {
String zkServer="127.0.0.1:2181";
String path="/zk-permanent";
ZkClient zkClient=new ZkClient(zkServer,5000);
logger.info("使用zkClient查询节点数据:");
//zkClient需要设置序列化后,才可以获取节点数据。不然会报错:ZkMarshallingError: java.io.EOFException
//默认的SerializableSerializer()可以会出现乱码。以下采用自定义的序列化设置
// zkClient.setZkSerializer( new SerializableSerializer());
zkClient.setZkSerializer(new MyZkSerializer());
zkClient.subscribeDataChanges(path, new IZkDataListener() {
@Override
public void handleDataChange(String dataPath, Object data) throws Exception {
logger.debug("Node:" +dataPath+" changed, new data:"+data);
} @Override
public void handleDataDeleted(String dataPath) throws Exception {
logger.debug("Node:"+dataPath+"deleted");
}
});
logger.debug(path+"节点下的数据为:"+ zkClient.readData(path)); }
}

参考资料:

https://blog.csdn.net/zwt0909/article/details/51737750

zookeeper报错: org.I0Itec.zkclient.exception.ZkMarshallingError: java.io.EOFException的更多相关文章

  1. 启动tomcat时,报错:IOException while loading persisted sessions: java.io.EOFException解决方法

    报错原因:加载持久化session错误,tomcat加载时读取的文件是是*.ser,session序列化文件,文件的位置是tomcat\work\Catalina\localhost,找到sessio ...

  2. <<< Tomcat运行报错IOException while loading persisted sessions: java.io.EOFException

    解决方法:将work下面的文件清空,主要是*.ser文件,或者只是删除掉session.ser即可以解决.

  3. 文件下载 路径中有中文 报错 提示 文件找不到 java.io.FileNotFoundException: http://192.168.1.141:8096/resources/card/comcard/????????/????????.png

    此问题主要是中文编码格式不对导致的,将路径中的中文部分设置下编码就可以啦 例如: String url =  "http://192.168.1.141:8096/resources/car ...

  4. 【原创】大叔问题定位分享(8)提交spark任务报错 Caused by: java.lang.ClassNotFoundException: org.I0Itec.zkclient.exception.ZkNoNodeException

    spark 2.1.1 一 问题重现 spark-submit --master local[*] --class app.package.AppClass --jars /jarpath/zkcli ...

  5. org.I0Itec.zkclient.exception.ZkTimeoutException: Unable to connect to zookeeper server within

    org.I0Itec.zkclient.exception.ZkTimeoutException: Unable to connect to zookeeper server within timeo ...

  6. Caused by: org.I0Itec.zkclient.exception.ZkTimeoutException: Unable to connect to zookeeper server within timeout: 5000

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'brandControl ...

  7. Exception in thread "main" org.I0Itec.zkclient.exception.ZkAuthFailedException: Authentication failure is thrown while creating kafka topic

    Exception in thread "main" org.I0Itec.zkclient.exception.ZkAuthFailedException: Authentica ...

  8. java.lang.ClassNotFoundException: org.I0Itec.zkclient.exception.ZkNoNodeException 异常 如何处理

    严重: Context initialization failed java.lang.NoClassDefFoundError: org/I0Itec/zkclient/exception/ZkNo ...

  9. zookeeper_service 出错 java.lang.NoClassDefFoundError: org/I0Itec/zkclient/exception/ZkNoNodeException

    2016-12-18 08:28:07 ContextLoader:358 ERROR - Context initialization failed java.lang.NoClassDefFoun ...

随机推荐

  1. 30.纯 CSS 创作一个晃动的公告板

    原文地址:https://segmentfault.com/a/1190000014983030 感想: 绝对定位+动画 HTML代码: <div class="signboard&q ...

  2. 17.1拓展之纯 CSS 创作炫酷的同心圆旋转动画

    效果地址:https://codepen.io/flyingliao/pen/ebjEMm?editors=1100 HTML代码: <div class="loader"& ...

  3. Python: 对CSV文件读写 和 Md5加密

    1. python 有专门的csv包,直接导入即可. import csv: 2. 直接使用普通文件的open方法 csv_reader=open("e:/python/csv_data/l ...

  4. spark快速大数据分析

    从上层来看,每个Spark 应用都由一个驱动器程序(driver program)来发起集群上的各种并行操作.驱动器程序包含应用的main 函数,并且定义了集群上的分布式数据集,还对这些分布式数据集应 ...

  5. centos7+hadoop完全分布式集群搭建

    Hadoop集群部署,就是以Cluster mode方式进行部署.本文是基于JDK1.7.0_79,hadoop2.7.5.  1.Hadoop的节点构成如下: HDFS daemon:  NameN ...

  6. javascript中的立即执行函数(function(){…})()

    javascript中的立即执行函数(function(){…})() 深入理解javascript中的立即执行函数,立即执行函数也叫立即调用函数,通常它的写法是用(function(){…})()包 ...

  7. Spring中的@Transactional 放在 类级别 和 方法级别 上有什么不同?

    Spring中的@Transactional 放在类级别 和 方法级别 上有什么不同? @Transactional放在类级别上是否等同于该类的每个方法都放上了@Transactional? 是的一般 ...

  8. Mysql 定时任务事件

    参考文献:https://blog.csdn.net/dream_ll/article/details/73499750

  9. mybatis初识

    mybatis采用弱连接,在一定程度上集中管理了sql的语句编写,又实现了自动映射bean. 此处以最基础的mybatis连接为例: 引入jar包: mybatis-3.4.5.jar ojdbc-6 ...

  10. 修改页面中显示出需要修改的数据(包括select选择框复显示)

    页面中需要用到某个对象时,在底层代码中赋值,然后页面用java代码进行获取调用 如下截图: select复显示:根据后台方法赋值选择框 ,并设置初始值 按钮及选择框的禁用(五种方法): 方法一: $( ...