Module java.base

Interface SeekableByteChannel

所有超接口:
AutoCloseable, ByteChannel, Channel, Closeable, ReadableByteChannel, WritableByteChannel
所有已知实现类:
FileChannel

public interface SeekableByteChannel extends ByteChannel
一个维护当前位置并允许更改位置的字节通道。

可寻址的字节通道连接到一个实体,通常是一个包含可读写的可变长度字节序列的文件。当前位置可以被查询修改。该通道还提供对连接的实体的当前大小的访问。当写入超出当前大小时,大小会增加;当进行截断时,大小会减小。

positiontruncate方法在没有其他返回值的情况下被指定返回调用它们的通道。这允许方法调用被链接。该接口的实现应该专门化返回类型,以便可以链接对实现类的方法调用。

自从:
1.7
参见:
  • Method Summary

    Modifier and Type
    Method
    Description
    long
    返回该通道的位置。
    position(long newPosition)
    设置该通道的位置。
    int
    从该通道读取一系列字节到给定缓冲区中。
    long
    size()
    返回该通道连接的实体的当前大小。
    truncate(long size)
    截断连接的实体,即该通道连接的实体,到给定大小。
    int
    从给定缓冲区向该通道写入一系列字节。

    Methods declared in interface java.nio.channels.Channel

    close, isOpen
  • Method Details

    • read

      int read(ByteBuffer dst) throws IOException
      从该通道读取一系列字节到给定缓冲区中。

      从该通道的当前位置开始读取字节,然后更新位置以实际读取的字节数。否则,此方法的行为与ReadableByteChannel接口中指定的完全相同。

      指定者:
      read 在接口 ReadableByteChannel
      参数:
      dst - 要传输字节的缓冲区
      返回:
      读取的字节数,可能为零,如果通道已到达流的末尾则为-1
      抛出:
      ClosedChannelException - 如果该通道已关闭
      AsynchronousCloseException - 如果另一个线程在读取操作进行中关闭了该通道
      ClosedByInterruptException - 如果另一个线程在读取操作进行中中断了当前线程,从而关闭了通道并设置了当前线程的中断状态
      NonReadableChannelException - 如果该通道未打开以进行读取
      IOException - 如果发生其他I/O错误
    • write

      int write(ByteBuffer src) throws IOException
      从给定缓冲区向该通道写入一系列字节。

      从该通道的当前位置开始写入字节,除非该通道连接到一个实体(例如使用APPEND选项打开的文件),在这种情况下,位置首先会被移动到末尾。连接到该通道的实体会增长,如果需要,以容纳写入的字节,然后更新位置以实际写入的字节数。否则,此方法的行为与WritableByteChannel接口中指定的完全相同。

      指定者:
      write 在接口 WritableByteChannel
      参数:
      src - 要检索字节的缓冲区
      返回:
      写入的字节数,可能为零
      抛出:
      ClosedChannelException - 如果该通道已关闭
      AsynchronousCloseException - 如果另一个线程在写入操作进行中关闭了该通道
      ClosedByInterruptException - 如果另一个线程在写入操作进行中中断了当前线程,从而关闭了通道并设置了当前线程的中断状态
      NonWritableChannelException - 如果该通道未打开以进行写入
      IOException - 如果发生其他I/O错误
    • position

      long position() throws IOException
      返回该通道的位置。
      返回:
      该通道的位置,从实体开头到当前位置的字节数(非负整数)
      抛出:
      ClosedChannelException - 如果该通道已关闭
      IOException - 如果发生其他I/O错误
    • position

      SeekableByteChannel position(long newPosition) throws IOException
      设置该通道的位置。

      将位置设置为大于当前大小的值是合法的,但不会更改实体的大小。稍后尝试在这样的位置读取字节将立即返回文件结束指示。稍后尝试在这样的位置写入字节将导致实体增长以容纳新字节;在前一个文件结束和新写入字节之间的任何字节的值是未指定的。

      不建议在连接到实体(通常是文件)并使用APPEND选项打开的情况下设置通道的位置。在打开以进行追加时,位置首先会被移动到末尾,然后再写入。

      参数:
      newPosition - 新位置,从实体开头计算的非负整数字节数
      返回:
      该通道
      抛出:
      ClosedChannelException - 如果该通道已关闭
      IllegalArgumentException - 如果新位置为负数
      IOException - 如果发生其他I/O错误
    • size

      long size() throws IOException
      返回该通道连接的实体的当前大小。
      返回:
      当前大小,以字节为单位
      抛出:
      ClosedChannelException - 如果该通道已关闭
      IOException - 如果发生其他I/O错误
    • truncate

      SeekableByteChannel truncate(long size) throws IOException
      截断连接的实体,即该通道连接的实体,到给定大小。

      如果给定大小小于当前大小,则截断实体,丢弃新末尾之外的任何字节。如果给定大小大于或等于当前大小,则不修改实体。在任一情况下,如果当前位置大于给定大小,则将其设置为该大小。

      当连接到实体(通常是文件)并使用APPEND选项打开时,该接口的实现可能禁止截断。

      参数:
      size - 新大小,非负字节计数
      返回:
      该通道
      抛出:
      NonWritableChannelException - 如果该通道未打开以进行写入
      ClosedChannelException - 如果该通道已关闭
      IllegalArgumentException - 如果新大小为负数
      IOException - 如果发生其他I/O错误