Netty网络编程-入门篇(二)-TIME协议

本文主要介绍了如何使用Netty实现TIME协议的编码和解码过程。通过详细讲解时间编码类和时间解码类的设计,以及TIME服务器和TimeClientHandler的实现,帮助读者理解Netty在网络编程中的应用。
摘要由CSDN通过智能技术生成

//代码还是源于官方文档

package netty;

import java.util.Date;

//定义一个数据模型
//2208988800为1900年1月1日00:00:00~1970年1月1日00:00:00的总秒数
public class UnixTime {
    private final long value;

    public UnixTime() {
        this(System.currentTimeMillis() / 1000L + 2208988800L);//计算时间的公式
    }

    public UnixTime(long value) {
        this.value = value;
    }

    public long value() {
        return value;
    }

    @Override
    public String toString() {
        return new Date((value() - 2208988800L) * 1000L).toString();
    }
}

编码:将人类语言转化位机器语言为编码,即文字到0和1
解码:将机器语言转化为人类语言即解码

时间编码类:

package netty;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelOutboundHandlerAdapter;
import io.netty.channel.ChannelPromise;
import io.netty.handler.codec.MessageToByteEncoder;

/**
 * @description 编写一个编码器将UnixTime对象重新转换位一个ByteBuf
 */
//public class TimeEncoder extends ChannelOutboundHandlerAdapter {
//
//    //第一,通过 ChannelPromise,当编码后的数据被写到了通道上 Netty 可以通过这个对象标记是成功还是失败。
//    //第二, 我们不需要调用 cxt.flush()。因为处理器已经单独分离出了一个方法 void flush(ChannelHandlerContext cxt),如果像自己实现 flush() 方法内容可以自行覆盖这个方法,也就是默认会调用flush()
//    @Override
//    public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
//        UnixTime m = (UnixTime) msg;
//        ByteBuf encoded = ctx.alloc().buffer();
//        encoded.writeInt((int)m.value());
//        ctx.write(encoded,promise);//(1)
//
//    }
//    @Override
//    public void flush(ChannelHandlerContext ctx) throws Exception {
//        super.flush(ctx);
//    }
//}

/**
 * @description 上面代码的简化操作
 */
public class TimeEncoder extends MessageToByteEncoder<UnixTime> {

    @Override
    protected void encode(ChannelHandlerContext ctx, UnixTime msg, ByteBuf out) throws Exception {
        out.writeInt((int)msg.value());
    }
}

时间解码类:

package netty;

import io.netty.buffer.ByteBuf
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值