I have some reason that do not want to directly use netty's client, as Java has SocketChannel, I have a write() method to write the object class to bytes via serialization then send to sever, but netty is bytebuf receiving:
The SocketChannel.write() is:
public void write(Object object) {
try {
System.out.println("The client writting at " + LocalDateTime.now() + " to " + this.host + ":" + this.port + " for " +
this.name);
this.sc.write(ByteBuffer.wrap(convertObjectToByte(object)));
System.out.println("The client writed at " + LocalDateTime.now() + " to " + this.host + ":" + this.port + " for " +
this.name);
} catch (IOException ex) {
System.out.println("The client failed to write at " + LocalDateTime.now() + " to " + this.host + ":" + this.port + " for " +
this.name);
this.connect();
Logger.getLogger(Task.class.getName()).log(Level.SEVERE, null, ex);
}
}
The Netty server is:
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
System.out.println(msg.getClass()); <-- I printed out the class is UnpoolUnsafeDirectBuffer.....
if (msg instanceof UptimeHttp) {
UptimeHttp uptimeHttp = (UptimeHttp) this.object;
System.out.println("The server processed at " + LocalDateTime.now() + " from " + ctx.channel().remoteAddress().toString().replace("/", "") + " for " + uptimeHttp.HttpRequestAddress);
} else {
System.out.println("An unknown object");
}
}
So how can I convert to just using convertByteToObject method in channelRead?
public static final Object convertByteToObject(byte[] bytes) {
try {
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInput in = new ObjectInputStream(bis);
return in.readObject();
} catch (IOException | ClassNotFoundException ex) {
Logger.getLogger(EchoServerHandler.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
}
Thanks!