1 | # MD5 |
Linux下将整型IPv4地址转换成点分十进制
编译OpenWRT(非官方版)
编译环境
- Ubuntu 12.04 32bit
- Windows Subsystem for Linux
项目源码
项目源码托管在GitHub上,地址如下:**openwrt-hc5x61**。
本项目不是官方支持的OpenWRT,因此OpenWRT版本比较旧,有较大的差别。
本项目使用的是极路由的极路由2路由器。
前提工作
- 必装工具(仅限Debian和Ubuntu)
1
sudo apt-get install build-essential git subversion wget flex gettext libncurses5-dev unzip gawk liblzma-dev zlib1g-dev ccache u-boot-tools
- Checkout项目代码
1
git clone https://github.com/rssnsj/openwrt-hc5x61.git
Java NIO Selector解析
用法
Selector的主要方法有三个:
- Selector.open():Selector
主要用于创建一个selector - select():int
该方法有两种模式:在阻塞模式下,该方法会一直阻塞,直到超时或者有注册的事件发生,返回发生事件的数量;在非阻塞模式下,会立即返回,如果没有事件发生,则返回0。 - selectedKeys():Set
获取已经就绪的事件的key的集合。
Selector.open()原理
通过阅读java.nio.channels.Selector的源码(如下),可以发现,其调用了SelectorProvider.provider()的openSelector()函数。
1 | public static Selector More ...open() throws IOException { |
先看SelectorProvider.provider(),在这个函数中,保证了provider有且仅有一个。
1 | public static SelectorProvider provider() { |
Java NIO Buffer解析
主要属性
capacity
作为一个内存块,Buffer有一个固定的大小值,也叫capacity.你只能往里写capacity个byte、long、char等类型。一旦Buffer满了,需要将其清空(通过读数据或者清除数据)才能继续写数据往里写数据。position
当你写数据到Buffer中时,position表示当前的位置。初始的position值为0。position最大可为capacity–1。当读取数据时,也是从某个特定位置读。当将Buffer从写模式切换到读模式,position会被重置为0。当从Buffer的position处读取数据时,position向前移动到下一个可读的位置。limit
在写模式下,Buffer的limit表示你最多能往Buffer里写多少数据。写模式下,limit等于Buffer的capacity。当切换Buffer到读模式时,limit表示你最多能读到多少数据。因此,当切换Buffer到读模式时,limit会被设置成写模式下的position值。换句话说,你能读到之前写入的所有数据。三者关系如下:

Buffer构造器
尽管Buffer是一个抽象类,但是依然有自己的构造器。
其主要作用是初始化抽象类的成员和子类的初始化。
1 | Buffer(int mark, int pos, int lim, int cap) { // package-private |