在看nio的一个示例程序的时候看到ByteBuffer的filp方法,没想明白它是做什么用的。jdk的comment写到:
Flips this buffer. The limit is set to the current position and thenthe position is set to zero. If the mark is defined then it isdiscarded.
还是没明白。。。
从他的代码来看非常的简单,就是:
limit = position;
position = 0;
mark = -1;
理解这个三句话首先要明白limit, position和mark这三个变量的含义。position指的是buffer当前指针的位置,所有的读写操作都是从position开始的。limit是指向第一个不应该被读/写的位置。而mark是指buffer被reset时position应该回到的位置。所以从这里就可以看出,flip的做的事情其实是将position指到最头上,将limit设置为当前位置,并且将mark清除。
通常如果在写buffer结束,准备要开始从里面读的时候,就要调用这个flip方法先。
分享到:
相关推荐
Java NIO提供了诸如ByteBuffer、CharBuffer、IntBuffer等类型,对应于不同的数据类型。缓冲区具有读写位置,可以通过flip()、clear()和rewind()等方法来管理缓冲区的状态,从而高效地进行数据读写。 3. **选择器...
在阅读或实现`byteBufferTest.java`时,注意观察如何利用ByteBuffer的特性进行高效的数据传输,例如与FileChannel配合读写文件,或者在网络编程中与SocketChannel交互。同时,理解源码可以帮助深入理解Java NIO的...
1. `java.nio`:这个包定义了Buffer及其子类,例如ByteBuffer,CharBuffer等。Buffer是NIO的核心组件,它是一个可以存储特定类型数据(如字节、字符、整数等)的线性容器。每个Buffer有capacity(容量)、limit...
### Java NIO 详细教程知识点解析 #### 一、Java NIO 概述 Java NIO(New IO)是Java平台提供的一种新的IO操作模式,它首次出现在Java 1.4版本中,并在后续版本中不断完善。Java NIO 的设计目的是为了克服传统Java ...
本类,是专门为了处理大文件,按行读取开发的类。 采用读文件的缓存 fbb 1024*5 行缓存 bb 256 字节 设计思想: 每次通过nio读取... fbb.flip(); return fbb.limit(); } } 把 fbb.position() 改成 fbb.limit()
import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.channels.FileChannel; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels....
import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; public class FeiNioRead { public static void main(String[] args...
本篇将深入探讨Java NIO(非阻塞I/O)中的ByteBuffer和Mina库自定义的ByteBuffer之间的区别。 Java NIO的ByteBuffer是Java标准库提供的一个核心类,它是通道(Channel)和缓冲区(Buffer)之间数据传输的主要媒介。它...
import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; public class AutoCharsetReader { public static void main...
1. **`java.nio`**: 定义了各种类型的缓冲区(Buffer),包括`ByteBuffer`、`CharBuffer`等。 2. **`java.nio.channels`**: 提供了一系列通道(Channel)接口及其具体实现,支持文件和网络的I/O操作。 3. **`java.nio....
import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java....
Java NIO提供了多种类型的缓冲区,如ByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer和LongBuffer等,它们都继承自抽象类Buffer。缓冲区具有容量、限制和位置等属性,以及诸如put、get和flip等操作...
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统I/O(BIO)模型的新技术。NIO在Java 1.4版本中引入,旨在提高I/O操作的效率,特别是在处理大量并发连接时。与传统的...
本节我们将深入探讨如何利用NIO进行文件复制,并通过示例代码`NioDemo.java`来理解相关类的使用。 首先,NIO的核心组件包括通道(Channel)、缓冲区(Buffer)和选择器(Selector)。在文件复制过程中,我们主要...
`ByteBuffer`尤其重要,因为它常用于`java.nio.channels`中的通道操作。 - **`java.nio.channels`**:这是NIO的核心,定义了多种通道接口,如文件通道和网络通道,以及用于异步I/O操作的关键类`Selector`。 - **`...
ByteBuffer是Java NIO(Non-Blocking I/O)的一部分,允许开发者高效地读写大量原始字节,如处理图像、音频或网络数据。本文将深入探讨Android中ByteBuffer的工作原理及其常见应用场景。 一、ByteBuffer的基础概念 ...
import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java....
import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class FileNioWrite { public static void main(String[] args) throws Exception { // 打开一个文件通道 RandomAccessFile file = ...
另一种方法是利用`java.nio`包的`FileChannel`和`ByteBuffer`,这种方法效率更高,因为它支持大块数据的传输。以下是使用`java.nio`的步骤: 1. 创建`FileChannel`对象,分别从源文件和目标文件的`FileInputStream`...
Java NIO提供了多种类型的缓冲区,如ByteBuffer、CharBuffer、IntBuffer等,它们都继承自抽象类Buffer。 3. **选择器(Selectors)**:选择器用于监控多个通道的事件,比如连接就绪、数据可读或可写等。通过一个...