java NIO Channel

本文深入探讨Java NIO的基础概念,包括Channel与Buffer的工作原理及使用方法。重点介绍FileChannel、DatagramChannel、SocketChannel和ServerSocketChannel等不同类型的Channel实现。同时,详细解释Buffer的各种操作,如写入数据、翻转、读取数据以及清除或压缩缓冲区。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()

内容概要:本文针对国内加密货币市场预测研究较少的现状,采用BP神经网络构建了CCi30指数预测模型。研究选取2018年3月1日至2019年3月26日共391天的数据作为样本,通过“试凑法”确定最优隐结点数目,建立三层BP神经网络模型对CCi30指数收盘价进行预测。论文详细介绍了数据预处理、模型构建、训练及评估过程,包括数据归一化、特征工程、模型架构设计(如输入层、隐藏层、输出层)、模型编译与训练、模型评估(如RMSE、MAE计算)以及结果可视化。研究表明,该模型在短期内能较准确地预测指数变化趋势。此外,文章还讨论了隐层节点数的优化方法及其对预测性能的影响,并提出了若干改进建议,如引入更多技术指标、优化模型架构、尝试其他时序模型等。 适合人群:对加密货币市场预测感兴趣的研究人员、投资者及具备一定编程基础的数据分析师。 使用场景及目标:①为加密货币市场投资者提供一种新的预测工具和方法;②帮助研究人员理解BP神经网络在时间序列预测中的应用;③为后续研究提供改进方向,如数据增强、模型优化、特征工程等。 其他说明:尽管该模型在短期内表现出良好的预测性能,但仍存在一定局限性,如样本量较小、未考虑外部因素影响等。因此,在实际应用中需谨慎对待模型预测结果,并结合其他分析工具共同决策。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值