t-io学习入门篇(一)

初识网络编程

最近有大神在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长度的数据。

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

转载于:https://my.oschina.net/u/2461727/blog/893899

你可能感兴趣的:(c#)