sgroschupf/zkclient

java.io.EOFException when readData

Opened this issue · 2 comments

`
Exception in thread "main" org.I0Itec.zkclient.exception.ZkMarshallingError: java.io.EOFException

at org.I0Itec.zkclient.serialize.SerializableSerializer.deserialize(SerializableSerializer.java:37)

at org.I0Itec.zkclient.ZkClient.derializable(ZkClient.java:1071)

at org.I0Itec.zkclient.ZkClient.readData(ZkClient.java:1106)

at org.I0Itec.zkclient.ZkClient.readData(ZkClient.java:1094)

at test.gzu.select.zk.TestWriteToZK.main(TestWriteToZK.java:29)

Caused by: java.io.EOFException

at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2332)

at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2801)

at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:802)

at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)

at org.I0Itec.zkclient.serialize.TcclAwareObjectIputStream.<init>(TcclAwareObjectIputStream.java:30)

at org.I0Itec.zkclient.serialize.SerializableSerializer.deserialize(SerializableSerializer.java:31)

... 4 more

`

This my code:

`
public static void main(String[] args) {

    ZkClient zkClient = new ZkClient("127.0.0.1:2181", 5000);

    byte[] file = zkClient.readData("/MySQLLog");

    System.out.println(file);

}

`

This my zookeeper node data:
`
[zk: localhost:2181(CONNECTED) 95] get /MySQLLog

adf

cZxid = 0xee

ctime = Mon Apr 18 04:48:01 CST 2016

mZxid = 0xf8

mtime = Mon Apr 18 06:17:18 CST 2016

pZxid = 0xee

cversion = 0

dataVersion = 1

aclVersion = 0

ephemeralOwner = 0x0

dataLength = 3

numChildren = 0
`

I can confirm this. Don't know how to reproduce though...
For my case, since the values are simple strings, I simply created a StringSerializer and setted that on the client instance...

Meet the same problem.
For my case, also the values are simple strings, I created a ZkStringSerializer which implements ZkSerializer and setted that on the client instance.
public class ZkStringSerializer implements ZkSerializer{......}
val zkClient = new ZkClient(hostAndPort,10000,10000,new ZkStringSerializer())