摘要:Java NIO系列教程(八) SocketChannel Java NIO 中的 SocketChannel 是一个连接到 TCP 网络套接字的通道。可以通过以下 2 种方式创建 SocketChannel: 打开一个 SocketChannel 并连接到互联网上的某台服务器。 一个新连接到达 S
阅读全文
摘要:Java NIO系列教程(七) FileChannel Java NIO 中的 FileChannel 是一个连接到文件的通道。可以通过文件通道读写文件。 FileChannel 无法设置为非阻塞模式,它总是运行在阻塞模式下。 一、打开 FileChannel 在使用 FileChannel 之前,
阅读全文
摘要:Java NIO系列教程(六) Selector Selector(选择器)是 Java NIO 中能够检测一到多个 NIO 通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个 channel,从而管理多个网络连接。 "深入浅出NIO Socket实现机制" 一、
阅读全文
摘要:Java NIO系列教程(五) 通道之间的数据传输 在 Java NIO 中,如果两个通道中有一个是 FileChannel,那你可以直接将数据从一个 channel(译者注:channel 中文常译作通道)传输到另外一个 channel。 一、通道的基本操作 二、直接缓冲区拷贝文件 三、trans
阅读全文
摘要:Java NIO系列教程(四) Scatter 和 Gather Java NIO 开始支持 scatter/gather,scatter/gather 用于描述从 Channel(译者注:Channel 在中文经常翻译为通道)中读取或者写入到 Channel 的操作。 从 Channel 中读取是
阅读全文
摘要:Java NIO系列教程(三) Buffer Java NIO 中的 Buffer 用于和 NIO 通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成 NIO Buffer 对象,并提供了一组方法,用
阅读全文
摘要:Java NIO系列教程(二) Channel Java NIO 的通道类似流,但又有些不同: 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。 通道可以异步地读写。 通道中的数据总是要先读到一个 Buffer,或者总是要从一个 Buffer 中写入。 正如上面所说,从通道读取数
阅读全文
摘要:Java NIO系列教程(一) Java NIO 概述 Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector 构成了核心的API。其它组件,如
阅读全文
摘要:Netty系列(四)TCP拆包和粘包 一、拆包和粘包问题 __(1) 一个小的Socket Buffer问题__ 在基于流的传输里比如 TCP/IP,接收到的数据会先被存储到一个 socket 接收缓冲里。不幸的是,基于流的传输并不是一个数据包队列,而是一个字节队列。即使你发送了 2 个独立的数据包
阅读全文
摘要:Netty 系列(三)Netty 入门 "Netty" 是一个提供异步事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络服务器和客户端程序。更多请参考: "Netty Github" 和 "Netty中文入门" 。 一、获得 Netty 可以通过 "Maven" 安装Netty。查看 "Ne
阅读全文
摘要:Socket IO 系列(三)基于 NIO 的同步非阻塞式编程 用于存储数据 用于传输数据 用于轮询 Channel 状态,四种状态:Connect(连接),Accept(阻塞),Read(读),Write(写) 一、Buffer(缓冲区) 不同于面向流的 IO 中将数据直接写入或读取到 Strea
阅读全文
摘要:Linux NIO 系列(01) 五种网络 IO 模型 [toc] __Netty 系列目录()__ 一、基本概念 在正式开始讲 Linux IO 模型前,先介绍 5 个基本概念。 1.1 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对 32 位操作系统而言,它的寻址空间 (虚拟存储空间
阅读全文