`
maozilee
  • 浏览: 252654 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

IoBuffer中mark()方法的使用

阅读更多

    mark就像书签一样,在这个IoBuffer里作个标记,以后再调用reset时就可以再回到这个mark过的地方。 也就是mark与reset是配对使用的!
    mark方法有个参数,通过这个整型参数,你告诉系统,希望在读出这么多个字符之前,这个mark保持有效。读过这么多字符之后,系统可以使mark不再有效,而你不能觉得奇怪或怪罪它。这跟buffer有关,如果你需要很长的距离,那么系统就必须分配很大的buffer来保持你的mark。 

     这个方法可以这么用吧,我想。读的时候,你读出了若干字符,做了某些判断或处理,发现还是从头来过比较好,也就是退回到原来的位置,再读一遍。用高手的话来说“mark就像书签一样,在这个BufferedReader对应的buffer里作个标记(xxx到此一游   哈哈),以后再调用reset时就可以再回到这个mark过的地方。”只是一游,神马都没变化!

//reader   is   a   BufferedReader 

reader.mark(50);//要求在50个字符之内,这个mark应该保持有效,系统会保证buffer至少可以存储50个字符 
int   a   =   reader.read();//读了一个字符 
int   b   =   reader.read();//又读了一个字符 

//做了某些处理,发现需要再读一次 
reader.reset(); 
reader.read();//读到的字符和a相同 
reader.read();//读到的字符和b相同

 

——————————————————————————————————————————————————

 

后附相关JDK原文档解释:

 

 

mark

public final Buffer mark()
在此缓冲区的位置设置标记。

 

 

返回:
此缓冲区

reset

public final Buffer reset()
将此缓冲区的位置重置为以前标记的位置。

调用此方法不更改也不丢弃标记的值。

 

返回:
此缓冲区
抛出:
InvalidMarkException - 如果尚未设置标记

<!-- -->

clear

public final Buffer clear()
清除此缓冲区。将位置设置为 0,将限制设置为容量,并丢弃标记。

在使用一系列通道读取或放置 操作填充此缓冲区之前调用此方法。例如:

 buf.clear();     // Prepare buffer for reading
 in.read(buf);    // Read data

此方法不能实际清除缓冲区中的数据,但从名称来看它似乎能够这样做,这样命名是因为它多数情况下确实是在清除数据时使用。

 

返回:
此缓冲区

flip

public final Buffer flip()
反转此缓冲区。首先将限制设置为当前位置,然后将位置设置为 0。如果已定义了标记,则丢弃该标记。

在一系列通道读取或放置 操作之后,调用此方法为一系列通道写入或相对获取 操作做好准备。例如:

 buf.put(magic);    // Prepend header
 in.read(buf);      // Read data into rest of buffer
 buf.flip();        // Flip buffer
 out.write(buf);    // Write header + data to channel

当将数据从一个地方传输到另一个地方时,经常将此方法与 compact 方法一起使用。

 

返回:
此缓冲区

<!-- -->

rewind

public final Buffer rewind()
重绕此缓冲区。将位置设置为 0 并丢弃标记。

在一系列通道写入或获取 操作之前调用此方法(假定已经适当设置了限制)。例如:

 out.write(buf);    // Write remaining data
 buf.rewind();      // Rewind buffer
 buf.get(array);    // Copy data into array

 

返回:
此缓冲区

remaining

public final int remaining()
返回当前位置与限制之间的元素数。

 

 

返回:
此缓冲区中的剩余元素数

hasRemaining

public final boolean hasRemaining()
告知在当前位置和限制之间是否有元素。

 

 

返回:
当且仅当此缓冲区中至少还有一个元素时返回 true
分享到:
评论

相关推荐

    【IT十八掌徐培成】Java基础第26天-05.ByteBuffer-mark-pos-limit-cap-flip.zip

    在Java编程语言中,`ByteBuffer`是Java NIO(New IO)框架中的核心类之一,它提供了一种高效处理字节数据的方式。本教程重点讲解了`ByteBuffer`的几个关键属性:mark、position、limit和capacity,以及重要的操作...

    jdk jdk jdk

    java.nio 中定义了 Buffer 及其数据类型相关的子类,而 java.nio.channels 中定义了一系列处理 IO 的 Channel 接口以及这些接口在文件系统和网络通讯上的实现。通过 Selector 这个类,还提供了进行非阻塞 IO 操作的...

    Java NIO 主要类和方法(Java NIO中文版 附录C)

    在Java NIO中,Buffer类是所有其他缓冲类的基类,为所有缓冲器类型提供了通用方法。下面详细说明Java NIO中的主要类和方法。 Buffer类(C.1.1): Buffer类是一个抽象类,提供了缓冲区操作的基本结构。以下是一些...

    新IO缓冲区的输入和输出

    4. **标记(mark)**:可以通过`mark()`方法记录当前位置,后续调用`reset()`可以回到标记的位置。 Buffer的常用操作包括`get()`和`put()`,它们分别用于读取和写入数据。子类如`ByteBuffer`、`CharBuffer`等针对不同...

    Java NIO.docx

    Java NIO 是 JDK 1.4 中引入的新的 IO 方式,它主要包含 Buffer、Channel、Selector 三个核心的组件。 Java NIO 概述 ---------------- Java NIO 是 Java 编程语言中的一种新的 IO 模式,它与传统 IO 的区别在于...

    java代码-buffer

    在这个“java代码-buffer”的主题中,我们将深入探讨Buffer的概念、使用方法以及它在实际编程中的应用。 1. **Java NIO (New IO)** Java NIO是Java 1.4引入的一个新特性,旨在提供一种不同于传统IO模型的I/O方式。...

    java io 2nd

    而NIO(New Input/Output)包中的`Buffer`和`Channel`接口则是对I/O操作进行更底层控制的工具。 - **异常处理**:I/O操作经常需要处理异常情况,`IOException`是处理I/O异常时最常遇到的异常类型。 - **控制台I/O*...

    Java IO学习之缓冲输入流(BufferedInputStream)

    Java IO中的BufferedInputStream是Java I/O流处理中非常重要的一部分,它属于过滤输入流(FilterInputStream)的一个子类。BufferedInputStream的主要目的是提高输入流的读取效率,通过内部维护一个缓冲区来批量处理...

    计算机软件-商业源码-228 使用流文件读取数据.zip

    8. **高级流操作**:可能涉及到了缓冲区的大小设置,以及`mark()`和`reset()`方法进行数据回溯。 9. **文件复制**:使用流进行文件复制是常见的练习,源码可能包含这一部分,演示了如何从一个文件读取数据,然后...

    CharArrayReader 介绍_动力节点Java学院整理

    【CharArrayReader】是Java IO库中的一个类,它专门用于读取字符数组。与`ByteArrayInputStream`不同,`CharArrayReader`处理的是字符数据,而`ByteArrayInputStream`处理的是字节数据。`CharArrayReader`继承自抽象...

    Java_NIO_API详解[参照].pdf

    Buffer提供了诸如clear、flip、rewind和mark等方法,用于管理和操作缓冲区中的数据。 2. **通道(Channel)**:通道类似于流,但它是双向的,可以进行读写操作。Java.nio.channels包中定义了多种类型的通道,如...

    2021面试必备--JAVA核心知识点整理.pdf

    标记清除算法(Mark-Sweep)、复制算法(Copying)、标记整理算法(Mark-Compact)和分代收集算法是JVM中常见的垃圾回收算法。分代收集算法中,新生代使用复制算法,而老年代使用标记整理算法。 Java中还有四种引用...

    谈谈NIO的理解Java系列2021.pdf

    缓冲区具有几个关键属性,比如容量(Capacity)、位置(Position)、限制(Limit)和标记(Mark),这些属性在读写过程中指示缓冲区的状态。 选择器(Selector)是NIO中用于实现单线程管理多个通道的机制。它允许一...

    JAVA核心面试知识整理

    Java中的IO操作包括输入和输出操作,提供了一套标准的Java IO库供用户使用。 2.8.1 阻塞IO模型 在阻塞IO模型中,应用程序在进行I/O操作时,必须等待数据准备好后才能进行,期间线程会被阻塞。 2.8.2 非阻塞IO模型 ...

    Java_输入输出流及文件读写详解

    在Java API中,I/O流被组织为一系列类和接口,主要位于`java.io`包。在JDK 1.0中引入了字节流(byte stream),JDK 1.1则添加了字符流(char stream)。字节流处理数据单位为字节,而字符流处理的是Unicode字符,...

    JAVA核心知识点.pdf

    Java NIO提供了基于通道(Channel)和缓冲区(Buffer)的IO操作方式,允许非阻塞的读写操作,并且可以实现高效的网络通信和文件处理。 Java集合框架提供了一套性能良好的接口和类,用于表示和操作数据。主要的集合...

    javaNIO学习笔记

    - 直接使用 put 方法写入 Buffer:`buf.put(111);` - **切换操作模式**:`buf.flip();` // 从写入模式切换到读取模式 - **读取 Buffer 中的数据**: - 向 Channel 写入数据:`int write = outChannel.write(buf);`...

    GZip无损压缩算法

    - 使用`FileStream`打开源文件并读取其全部内容到`buffer`中。 - 创建目标文件的`FileStream`,并在此之上创建`GZipStream`实例,设置模式为`CompressionMode.Compress`,表示将进行压缩操作。 - 将缓冲区中的...

    hbase bucket cache

    - 如果仍然未命中,则会从 IO Engine 中读取数据,并将数据块添加到 RAM Cache Map 和 Queue 中。 2. **第二次及以后使用流程**: - 当再次请求同一块时,首先会在 RAM Cache Map 中查找。 - 如果命中,则直接...

Global site tag (gtag.js) - Google Analytics