t-io学习入门篇(一)

初识网络编程

最近有大神在oschina开源了t-io,听说至关牛逼!因为本人是个菜,一直从事web开发,很想往网络编程方向转型。正好借大神的开源工具,本身好好充实一下本身的生活!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长度的数据。
相关文章
相关标签/搜索