java NIO Channel

Java NIO Channel

  • Channel 实施
  • 基本的Channel实例

Java NIO Channel和streams的区别

  • 你可以在Channel中读取和写入.Streams只能读或者写
  • Channels可以进行读写的异步
  • Channels通常是从Buffer中读取或者是写入到Buffer中

需要注意的是,你的数据从channel读取到buffer中,写入数据是也是通过buffer

Channel Implementations

这里有一些重要的Channel Implementation在Java NIO中:
* FileChannel:从文件中读写数据
* DatagramChannel:从UDP中读写数据
* SocketChannel:从TCP中读写数据
* ServerSocketChannel:允许你监听来自TCP的连接,就如同web服务器一样。对于每一个来的连接会创建一个SocketChannel

Channel实例(FileChannel)


Java NIO Buffer

  • 基本Buffer使用
  • Buffer容量,位置和限制
  • Buffer类型
  • 申请Buffer
  • 将数据写入到Buffer中
  • flip()
  • 从Buffer中获取数据
  • rewind()
  • clear() and compact()
  • mark() and reset()
  • equals() and compareTo()

Java NIO Buffers被用于和NIO Channel进行交互。正如你所知道的那样,数据从channels中读取到buffer中,或者数据以buffer的形式传给channels
一个Buffer本质上上是一个你只能写的内存块,之后你能再次读取。这个内存快包装到一个NIO Buffer对象中,这样能通过一些已经提供过的方法让我们更方便的操作内存块

基本的Buffer使用

使用Buffer的写和读数据操作通常都是如下的4个步骤:

  1. 将数据写入到buffer中
  2. 调用buffer.flip()函数
  3. 将数据从Buffer中读取
  4. 调用buffer.clear()或者时buffer.compact()函数

当你将数据写入到buffer中,buffer会跟踪你写了多少数据。一旦你需要读取数据的时候,你首先需要将buffer的写模式改变成读模式,调用flip()函数。在读模式,buffer允许你读取你之前所写入的所有数据
一旦你读取了所有的数据,你需要清除你的buffer,为了是让它再一次的能写。有两种方法可以做到这一点,一个是调用clear()函数或者是compact()函数。clear()函数清除全部的buffer。compact()函数只会清除你刚刚读的buffer。任何没有被读的buffer都会被新写入的数据冲掉

Buffer容量,位置和限制

一个buffer的本质是一个内存块,并且你能够写数据,在写入数据后可以通过buffer来进行读取。
这个内存块通过NIO Buffer对象进行修饰,提供方便的方法可以操纵内存。
一个Buffer可以有3个属性你应该熟悉的

  • 容量
  • 位置
  • 限制

容量和位置的概念建立于Buffer是读模式还是写模式。容量对于读模式和写模式都是一样的

Capacity

对于一个内存块,一个Buffer有一个确切的体积,所以叫做容量,你能往里面写入bytes, longs, chars等。一旦buffer满了,你需要清空它,这样你才能写入更多的数据

Position

当你向Buffer写数据的时候,你在一个确切的位置上。开始时候的位置是0.当一个数据类型如byte,long等类型被写入到Buffer中,这时候指针就会指向下一个位置等待插入,Position的位置是容量-1
当你从Buffer众读取数据的时候,你仍需要一个给定的位置。当你使用filp将一个Buffer从写模式切换到读模式的时候,position将会重置到0。当你读取数据的时候position会自动的指向下一个你要读取的位置

Limit

在写模式,限制是限制你能往buffer中写入多少数据。在写模式Limit相当于容量的大小
在读模式的时候,意味着你能从buffer中读取多少数据。因此当buffer转换成读模式的时候,limit限制到了写入的位置,这样你能读取刚刚写入的数据

Buffer类型

Java NIO有如下几种Buffer类型:

  • ByteBuffer
  • MappedByteBuffer
  • CharBuffer
  • DoubleBuffer
  • FloatBuffer
  • IntBuffer
  • LongBuffer
  • ShortBuffer

正如你所看到的,这些Buffer类型代表着不同的数据种类,换句话说,这让你能够操作char, short, int, long, float或者是double

申请Buffer

为了获得一个buffer对象,你必须首先申请它,每一个Buffer类都有一个Allocate函数,通过这个函数你能申请到Buffer

将数据写入到Buffer中

你可以通过两种方式将数据写入到Buffer中去

  1. 通过Channel将数据写入到Buffer中去
  2. 通过Buffer的put()方法

filp()

flip()函数能够将Buffer的写模式转换为读模式。调用filp()函数能够将position设置到0

从Buffer中获取数据

这里有两种从Buffer中读取数据的方法:

  1. 从Channel中读取数据
  2. 通过buffer的get方法获取数据

rewind()

Buffer.rewind()方法允许将position的位置设置到0,你可以重新读取数据

clearn() 和 compact()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值