capacity(): 表明缓冲区的容量大小, 一旦确定了大小, 将不能再改变;
limit(): 告诉您到目前为止已经往缓冲区填了多少字节,或者用#limit(int)来改变这个限制;
position(): 告诉您当前的位置,以执行下一个读/写操作;
mark(): 为了稍后用 reset() 进行重新设置而记住某个位置;
flip(): 交换限制指针和位置指针,然后将位置置为 0,并废弃已经做的mark标记。
缓冲区的基本操作是读#get()和写#put()。
缓冲区类型:
NIO具有7种特定的 Buffer 类型,每种类型对应着一个基本数据类型(除了 boolean)
- ByteBuffer
- CharBuffer
- DoubleBuffer
- FloatBuffer
- IntBuffer
- LongBuffer
- ShortBuffer
缓冲区分为直接缓冲区和间接缓冲区,直接缓冲区的创建成本要高于间接缓冲区,但同时它也会提供更快的I/O访问速度。所以直接缓冲区适合那种长期存在的缓冲区,而间接缓冲区则适合于生命周期较短的。还有,要注意,只有ByteBuffer可以创建直接缓冲区。
缓冲区的几个内部状态的改变:
容量(capacity),缓冲区大小
限制(limit),第一个不应被读取或写入的字节的索引,总是小于容量。
位置(position),下一个被读取或写入的字节的索引,总是小于限制。
0 <= position <= limit <= capacity
1. clear()方法:设置limit为capacity,position为0,并丢弃mark。
2. filp()方法:设置limit为当前position,然后设置position为0,并丢弃mark。
3. rewind()方法:保持limit不变,设置position为0,并丢弃mark。
相关推荐
根据提供的文件信息,我们可以提取并总结出关于Java NIO(New Input/Output)的重要知识点。 ### Java NIO 概述 Java NIO 是 Java 平台的一个重要特性,首次出现在 Java 1.4 版本中。它为 Java 开发者提供了一套...
Java.nio引入了通道(Channel)和缓冲区(Buffer)的概念。通道代表I/O操作的来源或目的地,如文件、套接字等;缓冲区则用于临时存储数据,提供了一种更有效的方式进行数据传输。NIO的核心组件还包括选择器...
总的来说,Java NIO API提供了一种更加高效、灵活的I/O编程模型,它通过Buffer、Channel和Selector这三个核心组件,实现了数据的缓冲和异步传输,极大地提升了Java在处理I/O操作时的性能和并发能力。开发者可以根据...
System.out.print((char) buffer.get()); } // 清空buffer以便再次使用 buffer.clear(); ``` ##### Selector操作示例 ```java // 创建一个Selector Selector selector = Selector.open(); // 打开一个...
此外,还有三个函数buffer-seq,buffer-nth和buffer-to-array,旨在使将java.nio类集成到Clojure中更加容易。 希望通过将它们的功能滚动到clojure.core中,它们将变得过时。 要使其他功能与ByteBuffers一起使用,还...
缓冲区类型包括ByteBuffer、CharBuffer、IntBuffer、DoubleBuffer等,它们都继承自`java.nio.Buffer`。 3. **选择器(Selector)**:用于监听多个通道的事件(如连接就绪、数据到达等),当某个通道准备好进行读写...
Java NIO,全称为New Input/Output,是Java在1.4版本引入的一个新的I/O API,用于替代标准的Java IO API。这个新的API提供了一种不同于传统阻塞I/O模型的非阻塞I/O处理方式,使得在处理高并发、大数据传输场景时性能...
FloatBuffer是Java NIO中的一种Buffer类型,用于存储浮点数。它继承自ByteBuffer,并提供了对浮点数读写的支持。`UseFloatBuffer.java`可能包含如何分配、填充、反转、清理和获取浮点数的示例代码。在处理大量浮点数...
Java NIO提供了一系列Buffer类,如ByteBuffer、CharBuffer、IntBuffer等,它们都继承自抽象类Buffer。 - **选择器(Selectors)**:选择器允许单线程处理多个通道,通过注册感兴趣的事件(如读、写、连接和接受)并...
Java NIO,全称为New Input/Output,是Java 1.4版本引入的一套全新的I/O API,旨在提高I/O操作的效率和灵活性。相比于传统的IO流,NIO提供了许多新特性,使得开发者能以更加高效的方式处理输入/输出。 1. **内存...
buffer.clear(); } } } catch (IOException e) { // 错误处理 } } } } // ... 主函数和其他辅助方法 } ``` 【常见问题与解决策略】 1. **CPU占用过高**:当注册了不必要的事件(如无数据可写时注册了写...
- `buffer.flip()`将缓冲区从写模式切换到读模式,以便可以读取之前写入的数据。 - `buffer.get()`获取并移除缓冲区中的一个字节,将其转换为字符并打印。 - `buffer.clear()`清空缓冲区,以便下次读取。 三、NIO读...
而Java NIO引入了Channel(通道)和Buffer(缓冲区)的概念,以及Selector(选择器)机制,使得一个线程可以同时监控多个通道的事件,大大提高了处理效率。以下是NIO的主要组件和特性: 1. **Channel**:类似于流,...
java.nio 中定义了 Buffer 及其数据类型相关的子类,而 java.nio.channels 中定义了一系列处理 IO 的 Channel 接口以及这些接口在文件系统和网络通讯上的实现。通过 Selector 这个类,还提供了进行非阻塞 IO 操作的...
在JDK 1.6的源码中,你可以深入理解这些概念的实现细节,例如`java.nio`包下的各种类和接口,以及`sun.nio`包中的实现类,这些都是NIO核心功能的实现。`launcher`可能是JVM的启动器,`org`、`javax`、`java`、`com`...
1. **`java.nio`**: 定义了各种类型的缓冲区(Buffer),包括`ByteBuffer`、`CharBuffer`等。 2. **`java.nio.channels`**: 提供了一系列通道(Channel)接口及其具体实现,支持文件和网络的I/O操作。 3. **`java.nio....
buffer.flip(); // 准备解码 // 自定义字符集识别逻辑 for (String charsetName : getPossibleCharsets()) { Charset charset = Charset.forName(charsetName); CharsetDecoder decoder = charset.newDecoder...