`

NIO学习笔记三(Buffer)

    博客分类:
  • NIO
nio 
阅读更多

这一章学习nio中的Buffer使用。

1、Buffer概述

Buffer可以认为是在内存中划分了块,这些区间允许往里面写数据和从里面读数据。这些内存块被包装

成了NIO Buffer对象,方便使用。

2、Buffer基本使用

使用Buffer进行数据读写,需要如下四步:

1、往Buffer中写入数据:通常使用Channel来完成。

2、调用 buffer.flip()方法:这个方法将Buffer从写模式(writing)转换为读模式(reading)。

3、从Buffer中读取数据。

4、调用 buffer.clear() 或者 buffer.compact()方法:clear方法清空整个Buffer,compact

方法将Buffer中未读取的内容安排至Buffer的开始位置。

 

3、Buffer  Capacity, Position and Limit

      capacity,position and limit是Buffer三个重要的属性。先看图:

Java NIO: Buffer capacity, position and limit in write and read mode.

Buffer capacity, position and limit in write and read mode.

 描述如下:

  • capacity:Buffer的容量,Buffer可以写入数据的容量大小,已Byte为单位。
  • position:指示当前数据读写的位置,主要是在于高速Buffer下个要读或者写的位置是什么。
  • limit:写入数据时与capacity概念一样,表示可以写入多少数据;读数据代表可读多少数据。

4、Buffer 的类型

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

    可将各种数据类型对Buffer读写。其中,MappedByteBuffer比较特殊,后面再提。

 

4、Buffer 的分配、写数据、flip、读数据

      空间分配:每种Buffer的类型都有allocate()方法,用来分配初始Buffer的大小。      写数据:两种方式,一是从Channel写入Buffer;二是通过代码put方法放入数据。

      flip:flip方法,表示buffer已经写完数据了,可以进行读了。

      读数据:两种方式,一是将Buffer的数据写入Channel中;二是通过get方法获取数据。

5、rewind、clear与compact、mark与reset

      rewind方法:将position属性重置为0,可以重读Buffer中的内容。

      clear与compact:clear清空整个Buffer,数据被清除,position被设置为0,从读模式转换为写模式;

                             compact清空已读的数据,将未读的数据放置在前面,position被设置为未读的数据位置。

      mark与reset:mark标记已读的位置,当想回到这个标记的时候,调用reset方法,将会回来。

 

分享到:
评论

相关推荐

    nio demo for nio学习笔记(体系结构以及模块介绍)

    在学习NIO时,首先需要理解Channel、Buffer、Selector的基本概念和使用方法,然后通过实例来熟悉它们的交互过程。例如,可以通过创建一个简单的服务器,使用ServerSocketChannel监听连接,SocketChannel处理客户端...

    javaNIO学习笔记

    ### Java NIO 学习笔记 #### 一、概述 Java NIO (Non-Blocking IO,也称为 Java New IO),是 Java 对传统 IO 模型的一次重大改进,旨在提高程序处理大量并发连接的能力。NIO 的核心组件包括 Channels、Buffers 和 ...

    JAVA NIO学习笔记.docx

    NIO的核心概念包括Channel、Buffer和Selector,它们共同构建了一个与操作系统交互的高效I/O模型。 1. **基本概念** IO是Input/Output的缩写,指的是程序与外部设备间的数据传输。在计算机中,数据通常存储在主存中...

    Java NIO学习笔记——ByteBuffer用法

    ByteBuffer的用法是Java NIO学习中的核心内容。 首先,我们了解下ByteBuffer的基本概念。ByteBuffer是一个字节缓冲区,可以存储字节序列。在NIO中,所有的数据读写都通过缓冲区进行,ByteBuffer与其他类型的Buffer...

    NIO学习笔记

    《NIO学习笔记》 在Java编程领域,NIO(Non-blocking Input/Output,非阻塞I/O)是一种重要的I/O模型,与传统的BIO(Blocking I/O)相对应。NIO提供了一种新的方式来处理I/O操作,特别是在处理大量并发连接时,它的...

    java NIO学习系列 笔记

    NIO的核心概念包括通道(Channel)和缓冲区(Buffer),这两个组件使得数据以块的形式进行传输,从而提高了性能。 1. **通道(Channel)**: - 通道是数据传输的双向路径,可以将数据从源读取到目标,也可以将数据...

    javaNIO学习笔记(csdn)————程序.pdf

    2. **缓冲区(Buffer)**:缓冲区是NIO中的核心概念,它是数据的容器。读取数据时,数据首先会被读入到缓冲区,然后再从缓冲区提取;写入数据时,先写入缓冲区,再从缓冲区写入通道。 3. **选择器(Selector)**:选择...

    nio相关知识学习

    博主分享的笔记可能还会深入讨论NIO与传统IO的差异、内存映射文件(MAPPED BUFFER)以及异步非阻塞I/O(AIO)等相关内容,这些都是Java开发者应当掌握的重要技能。 总之,NIO是Java中提升系统性能的重要工具,尤其...

    Java公司培训经典学习笔记

    - **NIO(New IO)**:介绍通道(Channel)、缓冲区(Buffer)、选择器(Selector)等核心概念。 - **文件操作**:文件的创建、删除、重命名,以及文件读写的相关API。 6. **多线程** - **线程创建**:通过...

    集合、NIO、Netty、Thread、MySql、Hive、HBase、Kafka、Spark、Fink等学习笔记.zip

    集合是Java编程中不可或缺的一部分,...这些学习笔记涵盖了Java开发、分布式系统、大数据处理和实时流计算等多个领域,是提升技术能力的好资源。通过深入学习和实践,你可以构建扎实的技术基础,适应不断变化的IT环境。

    Netty4.0学习笔记系列之三:构建简单的http服务

    Netty4.0学习笔记系列之三是关于构建简单的HTTP服务的教程,这主要涉及网络编程、服务器开发以及Java NIO(非阻塞I/O)的相关知识。Netty是一个高性能、异步事件驱动的网络应用程序框架,它使得开发可伸缩且稳定的...

    阿里P8 架构师整理Java学习笔记.pdf

    ### Java学习笔记知识点总结 #### 一、JVM与内存管理 **1.1 JVM基本概念** - **JVM(Java Virtual Machine)**: Java虚拟机是执行Java字节码的虚拟机,它提供了运行Java程序所需的环境。 **1.2 线程** - **线程...

    Apache_Mina2.0学习笔记

    最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 引言 1 一. Mina入门 2 第一步.下载使用的Jar包 2 第二步.工程创建配置 2 第三步.服务端程序 3 第四步.客户端程序 6 第五步.长...

    凯达Java学习笔记

    【凯达Java学习笔记】是一份综合性的Java编程学习资源,涵盖了从基础到进阶的各种主题,旨在帮助初学者和有经验的开发者提升Java技术能力。这份笔记可能包含了大量的实例代码、理论解释以及最佳实践,使得学习过程...

    java jdk 5学习笔记

    以下是对这个学习笔记中可能涵盖的知识点的详细解释: 1. **自动装箱与拆箱**: JDK 5引入了自动装箱和拆箱的概念,使得基础类型与对应的包装类之间可以无缝转换。例如,int与Integer,无需手动调用`Integer.value...

    学习笔记——资料

    - **NIO(New IO)**:了解非阻塞I/O模型,以及Channel、Buffer、Selector等NIO组件。 6. **多线程** - **线程创建**:通过Thread类和Runnable接口两种方式创建线程。 - **线程同步**:掌握synchronized关键字、...

    IO-黑马程序员Java学习笔记.rar

    这些可能涵盖了高级IO特性,如NIO(New IO,Java 1.4引入)和NIO.2(Java 7引入),包括选择器(Selector)、通道(Channel)、缓冲区(Buffer)和文件属性的处理。还有可能涉及网络IO,如Socket和ServerSocket的...

Global site tag (gtag.js) - Google Analytics