/** * java.net包中包含的都是最原始网络应用程序设施,包括 Socket, InetSocketAddress * * java.nio包中包含最新的网络应用构建基础设施,包括buf和channel * * SocketChannel.open()方法 * SelectorProvider.select() --> SelectorProvider实例 * * ServerSocketChannel.open ===> SelectorProvider.openServerSocketChannel(); * * SocketChannel.open() ===> SelectorProvider.openSocketChannel(); * * SocketChannel:面向流的连接套接字,用于selectable通道;调用open()打开channel,此时channel处于未连接状态, * 执行I/O操作触发NotYetConnectedException异常。调用connect()函数执行连接,连接完成的channel一直存在, * 除非主动关闭。isConnected()函数判断套接字channel是否已连接。此channel支持异步关闭,当某个套接字的输入 * endpoint被某个线程关闭,则另一个阻塞在读操作线程将立即返回-1. * * ServerSocketChannel: 面向监听的套接字,用于selectable通道,通过open方法创建,创建完的ServerSocketChannel已经打开, * 但还没有绑定,在未绑定的ServerSocketChannel执行accept方法将触发NotYetBoundException异常;绑定操作通过 * bind()函数完成。套接字的选项设置通过setOption(SocketOption, value)函数执行。支持的选项包括 * SO_RCVBUF SO_RCVBUF、SO_REUSEADDR SO_REUSEADDR。ServerSocketChannel是线程安全类。无法对已存在的套接字创建 * channel. * * Channel.readBuf() * * Channel.writeBuf("write things") * * SocketChannel.read(Buf)与SocketChannel.write(Buf)的作用: * 接口: ReadableByteChannel * 从channel中读取字节序列到buf中,读取的字节序列的length等于buffer余留的缓存大小=end - pos; * 接口: WritableByteChannel * 从buf中读取字节序列写入到channel中。 * * * 接口:Buffer * 属性: mark, position, limit, capacity; * 初始值: mark = -1; position = 0, limit = capacity; capacity由构造参数决定; * * flip操作对属性修改: limit = position; position = 0; mark = -1; * * */
java之nio总结
最新推荐文章于 2024-07-16 19:19:11 发布