文档章节

t-io学习入门篇(一)

卡尔码农
 卡尔码农
发布于 2017/05/06 17:06
字数 664
阅读 3665
收藏 16

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

初识网络编程

最近有大神在oschina开源了t-io,据说相当牛逼!由于本人是个菜,一直从事web开发,很想往网络编程方向转型。正好借大神的开源工具,自己好好充实一下自己的生活!

  • 从hello world代码开始
  • ByteBuffer的认识和使用,刚开始接触就开了client和server端的handler,其中比较重要的是一个encode和decode的方法,其中使用了ByteBuffer作为数据的载体。
  • 刚开始使用byte buffer不是很熟悉,自己写了几行代码来编码和解码一个最简单的字符串就报错,仔细看了一下也就理解了大概工作原理。
  public static void main(String[] args) throws Exception {
	String s = "1234abc草榴";
	int length = s.getBytes().length;
	ByteBuffer buffer = ByteBuffer.allocate(4+length);
	buffer.order(ByteOrder.BIG_ENDIAN);
	buffer.putInt(length);
	buffer.put(s.getBytes());
	buffer.flip();
	System.out.println(buffer.position());
	System.out.println(buffer.getInt());
	System.out.println(buffer.position());
	byte[] b = new byte[length];
	buffer.get(b);
	System.out.println(new String(b)); }

其中几个比较重要的参数需要了解清楚:

  • 1.ByteOrder.BIG_ENDIAN。 表示buffer在写数据的时候,字节数开始写的开始顺序,这个参数决定是从低位开始写数据,还是从高位开始写数据,BIG_ENDIAN 代表着把数据的高位写到bytebuffer高位(开始位),如上面字符串“1234abc草榴”,那么在byte buffer中就是把“1”写在byte buffer的最开头(先无视putInt的占位),以此类推。排序相反的是LITTLE_ENDIAN,顺序影响不大,只要您在解码的时候也按照相应的顺序来解码即可。
  • 2.ByteBuffer.flip()方法。在刚开始我没有写这个方法的时候去getInt直接报了溢出错误,原因是因为在我们写入数据后,byte buffer有个游标会一直指向写数据的最后一位,来告诉你下次写数据的时候继续往这个位置来写。flip()方法相当于把游标指向最开始,你便可以开始读取数据。
  • 3.ByteBuffer.allocate 。只是分配一块缓冲区域的大小,一般会使用4个字节作为头来标示您将要保存实际数据的字节数组长度。
  • 4.byte buffer在getInt的时候,游标会往后移动方便您继续读取后面的数据,所以在getInt之后会发现两个打印出来的position不一样,而get的时候正好从游标位置继续往后读取byte数组的length长度的数据。

希望自己能够继续坚持学习,把大神的框架吃透,如果有不对的地方还请同僚指正同时也不会误人子弟。感谢!

© 著作权归作者所有

卡尔码农
粉丝 91
博文 15
码字总数 19284
作品 0
常德
其他
私信 提问
加载中

评论(6)

冬孓
草榴是重点,圈起来,考试要考
彪付_3个字符
我就认识草榴,其它我都不认识
舒克呼叫贝塔
舒克呼叫贝塔
非常好的入门(这车开得我措手不及)👍
黑白丶
黑白丶
部门老大给了个任务,来学习t-io,发现了这几篇入门文章。
浏览之后发现博主也是“性”情中人啊,一言不合就开车。
卡尔码农
卡尔码农 博主

引用来自“talent-tan”的评论

https://my.oschina.net/talenttan/blog/889887


可以参考一下,加油!

欢迎大神光临,感谢为我们做出的贡献!0
talent-tan
talent-tan
https://my.oschina.net/talenttan/blog/889887


可以参考一下,加油!
【Python Web学习路线】干货整理,不谈虚的,让你短时间高效学好它!

无论是大数据、人工智能还是机器学习,Python都是最热门的首选语言。 学好Python,可以从事Python Web工程师、Python数据分析、人工智能专家等岗位。本期专题,分享的主题是“如何成为一枚优...

Eddie_yang
2018/12/24
914
0
react学习资源汇总

react-tutorial a tutorial react collection and sort,let you easily get started and organized 主要是搜集整理生态从入门到深入的教程、工具和自己做的demo,以便日后查阅 :blush: 设计思...

逆蝶_Snow
2016/12/01
442
0
1. 彤哥说netty系列之开篇(有个问卷调查)

你好,我是彤哥,本篇是netty系列的第一篇。 欢迎来我的公从号彤哥读源码系统地学习源码&架构的知识。 简介 本文主要讲述netty系列的整体规划,并调查一下大家喜欢的学习方式。 知识点 nett...

彤哥读源码
11/12
133
0
「诱人的Ruby」入门篇调查报告总结

「诱人的Ruby」是我录制的一套Ruby学习课程,一共分成了「入门」 - 「基础提高」 - 「进阶」 - 「高级」四大篇章。 去年(2013)在入门篇课时完结之后,我发起一个调查报告,一共有97人参与调...

blackanger
2018/06/28
0
0
少啰嗦!一分钟带你读懂Java的NIO和经典IO的区别

本文引用了“架构师社区”公众号的《史上讲的最好的Java NIO与IO的区别与应用》一文部分内容,感谢原作者的技术分享。 1、引言 很多初涉网络编程的程序员,在研究Java NIO(即异步IO)和经典...

JackJiang2011
06/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

006-ELK的二进制安装

二进制安装ELKstack 本次搭建属于单点,在同一台机器上进行安装 基础组件部署 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo wget -O /etc/yu...

伟大源于勇敢的开始
今天
5
0
OSChina 周四乱弹 —— 浙江台的电话号码倒是记得挺牢

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :《Out On The Streets》 一直不理解北欧人对重金属和死亡摇滚的热情,听完这首歌好像理解了。#今日歌曲推荐# 《Out On The Stre...

小小编辑
今天
14
0
Leetcode PHP题解--D121 21. Merge Two Sorted Lists

D121 21. Merge Two Sorted Lists 题目链接 21. Merge Two Sorted Lists 题目分析 合并两个有序链表。 思路 逐个遍历两个链表,把小的数字塞入数组里。之后再拼起来。 最终代码 <?php/** *...

skys215
今天
6
0
mars-config 动态配置管理

mars-config 码云地址:https://gitee.com/fashionbrot/mars-config 介绍 spring mvc 、springboot 动态配置系统。http 轮训方式 更新 动态配置 软件架构 软件架构说明 后端使用技术 :sprin...

fashionbrot
今天
16
0
女朋友玩吃鸡手游被开挂老哥骗炮,我见义勇为将骗子绳之以法

大家好,我是乔哥。 晚上10点以后下班后我回到自如出租房里面,开始处理公众号粉丝发来的消息,一条一条处理,突然看到了这么几条消息,吸引了我的眼球: 然后我就和这位女粉丝小红(化名)聊...

gzc426
今天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部