java.applet

java.awt

java.awt.color

java.awt.datatransfer

java.awt.dnd

java.awt.event

java.awt.font

java.awt.geom

java.awt.im

java.awt.im.spi

java.awt.image

java.awt.image.renderable

java.awt.print

java.beans

java.beans.beancontext

java.io

java.lang

java.lang.annotation

java.lang.instrument

java.lang.management

java.lang.ref

java.lang.reflect

java.math

java.net

java.nio

java.nio.channels

java.nio.channels.spi

java.nio.charset

java.nio.charset.spi

java.rmi

java.rmi.activation

java.rmi.dgc

java.rmi.registry

java.rmi.server

java.security

java.security.acl

java.security.cert

java.security.interfaces

java.security.spec

java.sql

java.text

java.util

java.util.concurrent

java.util.concurrent.atomic

java.util.concurrent.locks

java.util.jar

java.util.logging

java.util.prefs

java.util.regex

java.util.zip

javax.accessibility

javax.activity

javax.crypto

javax.crypto.interfaces

javax.crypto.spec

javax.imageio

javax.imageio.event

javax.imageio.metadata

javax.imageio.plugins.bmp

javax.imageio.plugins.jpeg

javax.imageio.spi

javax.imageio.stream

javax.management

javax.management.loading

javax.management.modelmbean

javax.management.monitor

javax.management.openmbean

javax.management.relation

javax.management.remote

javax.management.remote.rmi

javax.management.timer

javax.naming

javax.naming.directory

javax.naming.event

javax.naming.ldap

javax.naming.spi

javax.net

javax.net.ssl

javax.print

javax.print.attribute

javax.print.attribute.standard

javax.print.event

javax.rmi

javax.rmi.CORBA

javax.rmi.ssl

javax.security.auth

javax.security.auth.callback

javax.security.auth.kerberos

javax.security.auth.login

javax.security.auth.spi

javax.security.auth.x500

javax.security.cert

javax.security.sasl

javax.sound.midi

javax.sound.midi.spi

javax.sound.sampled

javax.sound.sampled.spi

javax.sql

javax.sql.rowset

javax.sql.rowset.serial

javax.sql.rowset.spi

javax.swing

javax.swing.border

javax.swing.colorchooser

javax.swing.event

javax.swing.filechooser

javax.swing.plaf

javax.swing.plaf.basic

javax.swing.plaf.metal

javax.swing.plaf.multi

javax.swing.plaf.synth

javax.swing.table

javax.swing.text

javax.swing.text

javax.swing.text.parser

javax.swing.text.rtf

javax.swing.tree

javax.swing.undo

javax.transaction

javax.transaction.xa

javax.xml

javax.xml.datatype

javax.xml.namespace

javax.xml.parsers

javax.xml.transform

javax.xml.transform.dom

javax.xml.transform.sax

javax.xml.transform.stream

javax.xml.validation

javax.xml.xpath

org.ietf.jgss

org.omg.CORBA

org.omg.CORBA_2_3

org.omg.CORBA_2_3.portable

org.omg.CORBA.DynAnyPackage

org.omg.CORBA.ORBPackage

org.omg.CORBA.portable

org.omg.CORBA.TypeCodePackage

org.omg.CosNaming

org.omg.CosNaming.NamingContextExtPackage

org.omg.CosNaming.NamingContextPackage

org.omg.Dynamic

org.omg.DynamicAny

org.omg.DynamicAny.DynAnyFactoryPackage

org.omg.DynamicAny.DynAnyPackage

org.omg.IOP

org.omg.IOP.CodecFactoryPackage

org.omg.IOP.CodecPackage

org.omg.Messaging

org.omg.PortableInterceptor

org.omg.PortableInterceptor.ORBInitInfoPackage

org.omg.PortableServer

org.omg.PortableServer.CurrentPackage

org.omg.PortableServer.POAManagerPackage

org.omg.PortableServer.POAPackage

org.omg.PortableServer.portable

org.omg.PortableServer.ServantLocatorPackage

org.omg.SendingContext

org.omg.stub.java.rmi

org.w3c.dom

org.w3c.dom.bootstrap

org.w3c.dom.events

org.w3c.dom.ls

org.xml.sax

org.xml.sax.ext

org.xml.sax.helpers

allclasses-frame

allclasses-noframe

constant-values

deprecated-list

help-doc

JavaTM 2 Platform
Standard Ed. 5.0

java.nio
类 Buffer

java.lang.Object
  继承者 java.nio.Buffer
直接已知子类:
ByteBuffer, CharBuffer, DoubleBuffer, FloatBuffer, IntBuffer, LongBuffer, ShortBuffer

public abstract class Buffer
extends Object

一种用于特定的基本类型数据的容器。

缓冲区是特定的基本类型元素的线性、有限序列。缓冲区的基本属性除其内容外还包括容量、限制和位置:

缓冲区的容量 是它所包含的元素的数量。缓冲区的容量永远不会为负并且从不会更改。

缓冲区的限制 是不应读取或写入的第一个元素的索引。缓冲区的限制永远不会为负,并且永远不会大于其容量。

缓冲区的位置 是下一个要读取或写入的元素的索引。缓冲区的位置永远不会为负,并且永远不会大于其限制。

每个非 boolean 基本类型都存在此类的一个子类。

传输数据

此类的每个子类都定义了两种 getput 操作:

相对 操作读取或写入从当前位置开始的一个或多个元素,然后将该位置增加传输的元素的数量。如果请求的传输超过了限制,则相对 get 操作将抛出 BufferUnderflowException,相对 put 操作将抛出 BufferOverflowException;但无论哪种情况,都不传输数据。

绝对 操作采用显式元素索引,不会影响位置。如果索引参数超过了该限制,则绝对 getput 操作将抛出 IndexOutOfBoundsException

当然,通过适当信道的 I/O 操作还可以将数据传输到缓冲区或从中传出数据(是传入还是传出,通常与当前位置有关)。

做标记和重置

缓冲区的标记 是在调用 reset 方法时其位置将被重置的索引。并不是总要定义标记,但是,在定义标记时,永远不要将其定义为负数,并且永远不要大于其位置。如果定义了标记,则在位置或限制调整为小于标记的值时,该标记将被丢弃。如果未定义标记,则调用 reset 方法将导致抛出 InvalidMarkException

不变式

下面的不变式持有标记、位置、限制和容量值:

0 <= 标记 <= 位置 <= 限制 <= 容量

新创建的缓冲区总有一个零位置和一个未定义的标记。初始限制可以为零,也可以是其他某个值,这取决于缓冲区类型及其构建方式。一般情况下,缓冲区的初始内容未定义。

清除、反转和重绕

除了访问位置、限制、容量值以及做标记和重置等方法外,此类还对缓冲区定义了以下操作:

  • clear() 使缓冲区做好了新序列信道读取或相对 put 操作的准备:它将限制设置为容量大小,将位置设置为零。

  • flip() 使缓冲区做好了新序列信道读取或相对 get 操作的准备:它将限制设置为当前位置,然后将该位置设置为零。

  • rewind() 使缓冲区做好了重新读取已包含的数据的准备:它使限制保持不变,并将位置设置为零。

只读缓冲区

每个缓冲区都是可读取的,但并非每个缓冲区都是可写入的。每个缓冲区类的 mutation 方法都被指定为可选操作,当调用只读缓冲区时,将抛出 ReadOnlyBufferException。只读缓冲区不允许更改其内容,但其标记、位置和限制值可以改变。缓冲区是否为只读通过调用其 isReadOnly 方法决定。

线程安全

缓冲区由当前的多个线程使用是不安全的。如果一个缓冲区由不止一个线程使用,则应该通过适当的同步来控制对该缓冲区的访问。

调用连接

指定此类中的方法(它们不返回其他值)以返回这些方法被调用时所在的缓冲区。此操作允许方法调用被连接;例如,语句序列

 b.flip();
 b.position(23);
 b.limit(42);
可以由下面单个、更紧凑的语句代替
 b.flip().position(23).limit(42);

从以下版本开始:
1.4

方法摘要
 int capacity()
          返回此缓冲区的容量。
 Buffer clear()
          清除此缓冲区。
 Buffer flip()
          反转此缓冲区。
 boolean hasRemaining()
          判断在当前位置和限制之间是否有任何元素。
abstract  boolean isReadOnly()
          判断此缓冲区是否为只读缓冲区。
 int limit()
          返回此缓冲区的限制。
 Buffer limit(int newLimit)
          设置此缓冲区的限制。
 Buffer mark()
          在此缓冲区的位置设置其标记。
 int position()
          返回此缓冲区的位置。
 Buffer position(int newPosition)
          设置此缓冲区的位置。
 int remaining()
          返回当前位置与限制之间的元素数量。
 Buffer reset()
          将此缓冲区的位置重新设置成以前标记的位置。
 Buffer rewind()
          重绕此缓冲区。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

方法详细信息

capacity

public final int capacity()
返回此缓冲区的容量。

返回:
此缓冲区的容量

position

public final int position()
返回此缓冲区的位置。

返回:
此缓冲区的位置

position

public final Buffer position(int newPosition)
设置此缓冲区的位置。如果标记已定义并且大于新的位置,则要丢弃该标记。

参数:
newPosition - 新位置值;必须为非负并且不能大于当前限制
返回:
此缓冲区
抛出:
IllegalArgumentException - 如果关于 newPosition 的前提不成立

limit

public final int limit()
返回此缓冲区的限制。

返回:
此缓冲区的限制

limit

public final Buffer limit(int newLimit)
设置此缓冲区的限制。如果位置大于新的限制,则它被设置为此新限制。如果标记已定义并且大于新限制,则要丢弃该标记。

参数:
newLimit - 新限制值;必须为非负并且不能大于此缓冲区的容量
返回:
此缓冲区
抛出:
IllegalArgumentException - 如果关于 newLimit 的前提不成立

mark

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

返回:
此缓冲区

reset

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

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

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

clear

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

在使用序列信道读取或 put 操作填充此缓冲区之前调用此方法。例如:

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

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

返回:
此缓冲区

flip

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

在序列信道读取或 put 操作之后,调用此方法以做好序列信道写入或相对 get 操作。例如:

 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()
重绕此缓冲区。将位置设置为零并丢弃标记。

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

 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

isReadOnly

public abstract boolean isReadOnly()
判断此缓冲区是否为只读缓冲区。

返回:
当且仅当此缓冲区为只读缓冲区时返回 true

JavaTM 2 Platform
Standard Ed. 5.0

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java 2 SDK SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策