zoukankan      html  css  js  c++  java
  • Channel概述

    前言

    前两篇文章介绍了NIO核心部分部分之一的缓冲区的相关内容,接下来我们继续学习NIO中另一个重要的核心部分——Channel(通道)。
    在学习这篇文章之前,先做下简单的说明,本文是一篇关于通道的概述文章,不对每种通道的细节特性做过多的叙述,只是让读者从宏观的角度对通道有个认识。

    • 什么是Channel
    • NIO中的Channel种类

    一.Channel

    Channels of various types, which represent connections to entities capable of performing I/O operations;

    java docs中是这样描述Channel,各种类型的Channel都代表着能连接到执行I/O操作的实体,比如:连接硬件设施(打印机)、文件、网络套接字等。

    有点类似流,但是Channel具有以下特性:

    1. 面向数据块的读写方式,即数据从Buffer读后写到Channel中或者从Channel中读后写到Buffer中。面向流的读写都是单个字节的读写方式
    2. Channel是双向的,一个打开的Channel既可以读也可以写。面向流的读写,是单向的
    3. Channel中有些类型的读写是有阻塞和非阻塞模式。流的读写是阻塞式
    4. Channel是线程安全的

    下图展示了Channel和Buffer之间的数据流向,直观性的表述下读写、双向特点:

    java nio包中对于Channel的表述,是以Channel接口作为Channel最上层接口抽象,UML类图如下:

    • isOpen:可以用来判断Channel是否打开
    • close:关闭Channel(有时需要关闭,回收释放资源)

    二.种类

    上节中讲述了Channel的基本概念,并Java docs中描述Channel是连接到I/O操作的实体。
    接下来就跟根据将Channel连接到不同的地方执行I/O操作将Channel做下简单的分类(Java SE 7)。

    • FileChannel:文件通道,连接到文件以进行文件的I/O(这里不做详细叙述)
    • SocketChannel:基于TCP可靠连接的道道,连接到套接字
    • DataGramChannel:基于UDP的通道
    • ServerSocketChannel:监听套接字的可选择通道

    java nio中有以上几种常用的Channel,是基于TCP、UDP、文件的I/O操作的API。

    SocketChannel和ServerSocketChannel拥有两种读写模式:阻塞和非阻塞模式。具体的详情后续文章会介绍,这里只做宏观的了解Channel

  • 相关阅读:
    Silverlight在线创建PDF(支持中文)
    ROR学习笔记(2):Asp.Net开发者看ROR
    Flash/Flex学习笔记(3):动态添加组件
    Flash/Flex学习笔记(2):捕获摄像头
    javascript中function调用时的参数检测常用办法
    Flash/Flex学习笔记(5):捕获摄像头(续)在线抓屏并保存到客户端本地
    ruby on rails + mysql 开发环境搭建
    再谈Silverlight中的对象序列化/反序列化
    温故而知新:设计模式之装饰模式(Decorator)
    选择一款适合自己的ruby on rails IDE开发工具
  • 原文地址:https://www.cnblogs.com/lxyit/p/9138964.html
Copyright © 2011-2022 走看看