包含标签 NIO 的文章

Java NIO 系列学习 10 - ServerSocketChannel

ServerSocketChannel 可以监听传入的TCP连接,与Java标准库的ServerSocket类似。

举个例子:

ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.socket().bind(new InetSocketAddress(9999));

while(true){
    SocketChannel socketChannel = serverSocketChannel.accept();
    //do something with socketChannel...
}
……

阅读全文

Java NIO 系列学习 09 - SocketChannel

Java NIO SocketChannel 是一个连接TCP网络socket的channel。与标准库的网络Socket是等效的。有两个办法可以来建立SocketChannel

  1. 打开了 SocketChannel 连接到了网络上的一个服务
  2. 传入了 ServerSocketChannel 连接
……

阅读全文

Java NIO 系列学习 08 - FileChannel

Java NIO FileChannel 是连接文件的channel。使用fileChannle可以实现从文件中读写数据。FileChannel是用来替代Java标准库IO API的。

FileChannel 不能被置为非阻塞模式,永远都是阻塞模式。

……

阅读全文

Java NIO 系列学习 07 - Selector

Java NIO Selector 是一个可以选择一个或多个 Channel 实例、确定哪个 Channel 处于可写或可读状态的组件。
通过这种方式,一个线程可以管理多个 Channel、多个网络连接。

……

阅读全文

Java NIO 系列学习 05 - Scatter and Gather

Java NIO 提供了内置的Scatter和Gather支持。Scatter和Gatter是用于读写Channel的概念。

Scatter从一个Channel中读取数据,然后写到多个Buffer中。

Gather从多个Buffer中拿到数据,然后写到一个Channel中。

在我们需要分开处理传输数据的各个部分时很有用。比如,一条消息由头部和正文组成,我们需要单独对头部和正文的内容进行分开处理,就可以把头部和正文单独存储在Buffer中。

……

阅读全文

Java NIO 系列学习 04 - Buffers

Java NIO Buffers 是与 Channels一起组合使用的。

Buffer本质上是一块内存区,我们可以写入数据,然后再读出来。这个内存区被包装为 NIO Buffer 对象, 这个对象提供了一组方法以方便我们操作内存区。

……

阅读全文

Java NIO 系列学习 03 - Channels

Java NIO Channels 在很多地方都与 streams 相似,不同点有下面几个:

  • Channels是双向的,可以读和写,而streams是单向的
  • Channels可以进行异步读和写
  • Channels总是读或写buffer

再重复一下,我们从 Channel 读数据到 Buffer,或者从 Buffer 写数据到 Channel。

……

阅读全文

Java NIO 系列学习 02 - 概述

Java NIO 包括了下面几个核心组件

  • Channels
  • Buffers
  • Selectors

Java NIO 有很多的类和组件,但核心的是 Channels, BuffersSelectors
其它的组件,像 PipeFileLock,只是跟上面这三个核心组件组合使用的工具类。
因此我们着重介绍这三个核心组件。

……

阅读全文