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

你可能感兴趣的:(buffer,网络编程,mark)