初识网络编程
最近有大神在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长度的数据。