Class RealSource

java.lang.Object
org.miaixz.bus.core.io.source.RealSource
All Implemented Interfaces:
Closeable, AutoCloseable, Channel, ReadableByteChannel, BufferSource, Source

public class RealSource extends Object implements BufferSource
原始缓冲流
Since:
Java 17+
Author:
Kimi Liu
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    final Buffer
     
    final Source
     
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    关闭此源并释放此源持有的资源.
    boolean
    如果此源中没有更多字节,则返回 true。 这将阻塞,直到有字节可读取或源确实已耗尽
    该源的内部缓冲区
    long
    indexOf(byte b)
    Equivalent to indexOf(b, 0).
    long
    indexOf(byte b, long fromIndex)
    返回缓冲区中第一个 b 的索引,位于 fromIndex 处或之后。 这会根据需要扩展缓冲区,直到找到 b。这会将无限数量的字节读入缓冲区。如果在找到请求的字节之前流已耗尽,则返回 -1。
    long
    indexOf(byte b, long fromIndex, long toIndex)
    如果在 fromIndextoIndex 范围内找到 b,则返回其索引。 如果未找到 b,或者 fromIndex == toIndex,则返回 -1。
    long
    相当于indexOf(bytes, 0)
    long
    indexOf(ByteString bytes, long fromIndex)
    返回缓冲区中 bytes 的第一个匹配项的索引,位于 fromIndex 处或之后。 这会根据需要扩展缓冲区,直到找到 bytes。这会将无限数量的字节读入缓冲区。如果在找到请求的字节之前流已耗尽,则返回 -1。
    long
    long
    indexOfElement(ByteString targetBytes, long fromIndex)
    返回此缓冲区中位于 fromIndex 或之后且包含 targetBytes 中任意字节的第一个索引。 这会根据需要扩展缓冲区,直到找到目标字节。这会将无限数量的字节读入缓冲区。如果在找到请求的字节之前流已耗尽,则返回 -1。
    返回从该源读取的输入流
    boolean
     
    返回一个新的 BufferedSource,可从此 BufferedSource读取数据但不使用它。 一旦下次读取或关闭此源,返回的源将变为无效。
    boolean
    rangeEquals(long offset, ByteString bytes)
    如果此源中 offset 处的字节等于 bytes,则返回 true。 这会根据需要扩展缓冲区,直到某个字节不匹配、所有字节都匹配,或者在足够的字节确定匹配之前流已耗尽。
    boolean
    rangeEquals(long offset, ByteString bytes, int bytesOffset, int byteCount)
    如果此源中 offset 处的 byteCount 个字节等于 bytesOffset 处的 bytes,则返回 true。 这会根据需要扩展缓冲区,直到某个字节不匹配、所有字节都匹配,或者在足够的字节确定匹配之前流已耗尽。
    int
    read(byte[] sink)
    从中移除最多 sink.length 个字节并将其复制到 sink。 返回读取的字节数,如果此源已耗尽,则返回 -1。
    int
    read(byte[] sink, int offset, int byteCount)
    从此处删除最多 byteCount 个字节并将其复制到 offset 处的 sink。 返回读取的字节数,如果此源已耗尽,则返回 -1。
    int
     
    long
    read(Buffer sink, long byteCount)
    从中删除至少1个字节,最多为byteCount字节, 并将它们 附加到sink。返回读取的字节数,如果该源已耗尽,则返回-1
    long
    readAll(Sink sink)
    从中删除所有字节并将其附加到 sink。返回写入 sink 的总字节数,如果已用尽,则为 0。
    byte
    从该源中删除一个字节并返回它
    byte[]
    从中删除所有字节并将它们作为字节数组返回。
    byte[]
    readByteArray(long byteCount)
    从中删除 byteCount 个字节并将其作为字节数组返回。
    从中删除所有字节并将它们作为字节字符串返回
    readByteString(long byteCount)
    从中删除 byteCount 个字节并将其作为字节字符串返回。
    long
    以有符号十进制形式从此源读取一个长整型值(即以十进制为基数的字符串,前导字符可选为“-”)。此操作将不断迭代,直到找到非数字字符。
    void
    readFully(byte[] sink)
    从中删除恰好 sink.length 个字节并将其复制到 sink。 如果无法读取请求的字节数,则抛出 EOFException
    void
    readFully(Buffer sink, long byteCount)
    从中删除精确的 byteCount 个字节并将其附加到 sink。 如果无法读取请求的字节数,则抛出 EOFException
    long
    以十六进制形式(即以 16 进制表示的字符串)读取此源的长格式。此过程将不断迭代,直到找到非十六进制字符
    int
    从此源中删除四个字节并返回一个大整数
    int
    从该源中删除四个字节并返回一个小整数
    long
    该源中删除八个字节并返回一个大长整型
    long
    从此源中删除八个字节并返回一个小长整型
    short
    从此源中删除两个字节并返回一个短整型
    short
    从此源中删除两个字节并返回一个整型
    readString(long byteCount, Charset charset)
    从中删除 byteCount 个字节,将其解码为 charset,并返回字符串。
    从中删除所有字节,将其解码为charset,并返回字符串。
    从中删除所有字节,将其解码为 UTF-8,然后返回字符串。如果此源为空,则返回空字符串。
    readUtf8(long byteCount)
    从中删除 byteCount 个字节,将其解码为 UTF-8,并返回字符串。
    int
    删除并返回单个 UTF-8 代码点,根据需要读取 1 到 4 个字节。 如果此源不是以正确编码的 UTF-8 代码点开头,则此方法将删除 1 个或多个非 UTF-8 字节并返回替换字符 (U+FFFD)。 这包括编码问题(输入不是正确编码的 UTF-8)、字符超出范围(超出 Unicode 的 0x10ffff 限制)、UTF-16 代理的代码 点 (U+d800..U+dfff) 和过长编码(例如,修改版 UTF-8 中的 NUL 字符为 0xc080
    删除并返回直到下一个换行符(但不包括该换行符)的字符。 换行符为 "\n""\r\n";这些字符不包含在结果中。
    删除并返回直到下一个换行符(但不包括该换行符)的字符。 换行符为 "\n""\r\n";这些字符不包含在结果中
    readUtf8LineStrict(long limit)
    BufferSource.readUtf8LineStrict() 类似,不同之处在于它允许调用者指定允许的最长匹配。 使用它来防止可能不包含 "\n""\r\n" 的流。
    boolean
    request(long byteCount)
    如果缓冲区至少包含 byteCount 个字节,则返回 true,并根据需要对其进行扩展。 如果在读取请求的字节之前源已耗尽,则返回 false。
    void
    require(long byteCount)
    当缓冲区至少包含 byteCount 个字节时返回。 如果在读取所需字节之前源已耗尽,则抛出 EOFException
    int
    select(SegmentBuffer segmentBuffer)
    options 中查找第一个作为此缓冲区前缀的字符串,从此缓冲区中使用它,并返回其索引。 如果 options 中没有字节字符串是此缓冲区的前缀,则返回 -1,并且不消耗任何字节。 如果事先知道预期值集,则可以将其用作 BufferSource.readByteString() 甚至 BufferSource.readUtf8() 的替代。
    void
    skip(long byteCount)
    从此源读取并丢弃 byteCount 个字节
    返回此源的超时时间.
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Field Details

    • buffer

      public final Buffer buffer
    • source

      public final Source source
  • Constructor Details

    • RealSource

      public RealSource(Source source)
  • Method Details

    • getBuffer

      public Buffer getBuffer()
      Description copied from interface: BufferSource
      该源的内部缓冲区
      Specified by:
      getBuffer in interface BufferSource
      Returns:
      Buffer
    • read

      public long read(Buffer sink, long byteCount) throws IOException
      Description copied from interface: Source
      从中删除至少1个字节,最多为byteCount字节, 并将它们 附加到sink。返回读取的字节数,如果该源已耗尽,则返回-1
      Specified by:
      read in interface Source
      Parameters:
      sink - 缓冲
      byteCount - 长度大小
      Returns:
      the long
      Throws:
      IOException - 异常
    • exhausted

      public boolean exhausted() throws IOException
      Description copied from interface: BufferSource
      如果此源中没有更多字节,则返回 true。 这将阻塞,直到有字节可读取或源确实已耗尽
      Specified by:
      exhausted in interface BufferSource
      Returns:
      the true/false
      Throws:
      IOException - 异常
    • require

      public void require(long byteCount) throws IOException
      Description copied from interface: BufferSource
      当缓冲区至少包含 byteCount 个字节时返回。 如果在读取所需字节之前源已耗尽,则抛出 EOFException
      Specified by:
      require in interface BufferSource
      Parameters:
      byteCount - 字节数
      Throws:
      IOException - 异常
    • request

      public boolean request(long byteCount) throws IOException
      Description copied from interface: BufferSource
      如果缓冲区至少包含 byteCount 个字节,则返回 true,并根据需要对其进行扩展。 如果在读取请求的字节之前源已耗尽,则返回 false。
      Specified by:
      request in interface BufferSource
      Parameters:
      byteCount - 字节数
      Returns:
      the true/false
      Throws:
      IOException - 异常
    • readByte

      public byte readByte() throws IOException
      Description copied from interface: BufferSource
      从该源中删除一个字节并返回它
      Specified by:
      readByte in interface BufferSource
      Returns:
      the true/false
      Throws:
      IOException - 异常
    • readByteString

      public ByteString readByteString() throws IOException
      Description copied from interface: BufferSource
      从中删除所有字节并将它们作为字节字符串返回
      Specified by:
      readByteString in interface BufferSource
      Returns:
      the ByteString
      Throws:
      IOException - 异常
    • readByteString

      public ByteString readByteString(long byteCount) throws IOException
      Description copied from interface: BufferSource
      从中删除 byteCount 个字节并将其作为字节字符串返回。
      Specified by:
      readByteString in interface BufferSource
      Returns:
      the ByteString
      Throws:
      IOException - 异常
    • select

      public int select(SegmentBuffer segmentBuffer) throws IOException
      Description copied from interface: BufferSource
      options 中查找第一个作为此缓冲区前缀的字符串,从此缓冲区中使用它,并返回其索引。 如果 options 中没有字节字符串是此缓冲区的前缀,则返回 -1,并且不消耗任何字节。 如果事先知道预期值集,则可以将其用作 BufferSource.readByteString() 甚至 BufferSource.readUtf8() 的替代。
      
         Options FIELDS = Options.of(
             ByteString.encodeUtf8("depth="),
             ByteString.encodeUtf8("height="),
             ByteString.encodeUtf8("width="));
      
         Buffer buffer = new Buffer()
             .writeUtf8("width=640\n")
             .writeUtf8("height=480\n");
      
         assertEquals(2, buffer.select(FIELDS));
         assertEquals(640, buffer.readDecimalLong());
         assertEquals('\n', buffer.readByte());
         assertEquals(1, buffer.select(FIELDS));
         assertEquals(480, buffer.readDecimalLong());
         assertEquals('\n', buffer.readByte());
       
      Specified by:
      select in interface BufferSource
      Parameters:
      segmentBuffer - 索引值
      Returns:
      the int
      Throws:
      IOException - 异常
    • readByteArray

      public byte[] readByteArray() throws IOException
      Description copied from interface: BufferSource
      从中删除所有字节并将它们作为字节数组返回。
      Specified by:
      readByteArray in interface BufferSource
      Returns:
      the byte
      Throws:
      IOException - 异常
    • readByteArray

      public byte[] readByteArray(long byteCount) throws IOException
      Description copied from interface: BufferSource
      从中删除 byteCount 个字节并将其作为字节数组返回。
      Specified by:
      readByteArray in interface BufferSource
      Returns:
      the byte
      Throws:
      IOException - 异常
    • read

      public int read(byte[] sink) throws IOException
      Description copied from interface: BufferSource
      从中移除最多 sink.length 个字节并将其复制到 sink。 返回读取的字节数,如果此源已耗尽,则返回 -1。
      Specified by:
      read in interface BufferSource
      Parameters:
      sink - 字节集合
      Returns:
      the int
      Throws:
      IOException - 异常
    • readFully

      public void readFully(byte[] sink) throws IOException
      Description copied from interface: BufferSource
      从中删除恰好 sink.length 个字节并将其复制到 sink。 如果无法读取请求的字节数,则抛出 EOFException
      Specified by:
      readFully in interface BufferSource
      Parameters:
      sink - 字节集合
      Throws:
      IOException - 异常
    • read

      public int read(byte[] sink, int offset, int byteCount) throws IOException
      Description copied from interface: BufferSource
      从此处删除最多 byteCount 个字节并将其复制到 offset 处的 sink。 返回读取的字节数,如果此源已耗尽,则返回 -1。
      Specified by:
      read in interface BufferSource
      Parameters:
      sink - 字节集合
      offset - 偏移位
      byteCount - 字节数
      Returns:
      the int
      Throws:
      IOException - 异常
    • read

      public int read(ByteBuffer sink) throws IOException
      Specified by:
      read in interface ReadableByteChannel
      Throws:
      IOException
    • readFully

      public void readFully(Buffer sink, long byteCount) throws IOException
      Description copied from interface: BufferSource
      从中删除精确的 byteCount 个字节并将其附加到 sink。 如果无法读取请求的字节数,则抛出 EOFException
      Specified by:
      readFully in interface BufferSource
      Parameters:
      sink - 字节集合
      byteCount - 字节数
      Throws:
      IOException - 异常
    • readAll

      public long readAll(Sink sink) throws IOException
      Description copied from interface: BufferSource
      从中删除所有字节并将其附加到 sink。返回写入 sink 的总字节数,如果已用尽,则为 0。
      Specified by:
      readAll in interface BufferSource
      Parameters:
      sink - 字节集合
      Returns:
      the long
      Throws:
      IOException - 异常
    • readUtf8

      public String readUtf8() throws IOException
      Description copied from interface: BufferSource
      从中删除所有字节,将其解码为 UTF-8,然后返回字符串。如果此源为空,则返回空字符串。
      
         Buffer buffer = new Buffer()
             .writeUtf8("Uh uh uh!")
             .writeByte(' ')
             .writeUtf8("You didn't say the magic word!");
      
         assertEquals("Uh uh uh! You didn't say the magic word!", buffer.readUtf8());
         assertEquals(0, buffer.size());
      
         assertEquals("", buffer.readUtf8());
         assertEquals(0, buffer.size());
       
      Specified by:
      readUtf8 in interface BufferSource
      Returns:
      the string
      Throws:
      IOException - 异常
    • readUtf8

      public String readUtf8(long byteCount) throws IOException
      Description copied from interface: BufferSource
      从中删除 byteCount 个字节,将其解码为 UTF-8,并返回字符串。
      
         Buffer buffer = new Buffer()
             .writeUtf8("Uh uh uh!")
             .writeByte(' ')
             .writeUtf8("You didn't say the magic word!");
         assertEquals(40, buffer.size());
      
         assertEquals("Uh uh uh! You ", buffer.readUtf8(14));
         assertEquals(26, buffer.size());
      
         assertEquals("didn't say the", buffer.readUtf8(14));
         assertEquals(12, buffer.size());
      
         assertEquals(" magic word!", buffer.readUtf8(12));
         assertEquals(0, buffer.size());
       
      Specified by:
      readUtf8 in interface BufferSource
      Parameters:
      byteCount - 字节数
      Returns:
      the string
      Throws:
      IOException - 异常
    • readString

      public String readString(Charset charset) throws IOException
      Description copied from interface: BufferSource
      从中删除所有字节,将其解码为charset,并返回字符串。
      Specified by:
      readString in interface BufferSource
      Parameters:
      charset - 字符编码
      Returns:
      the string
      Throws:
      IOException - 异常
    • readString

      public String readString(long byteCount, Charset charset) throws IOException
      Description copied from interface: BufferSource
      从中删除 byteCount 个字节,将其解码为 charset,并返回字符串。
      Specified by:
      readString in interface BufferSource
      Parameters:
      byteCount - 字节数
      charset - 字符编码
      Returns:
      the string
      Throws:
      IOException - 异常
    • readUtf8Line

      public String readUtf8Line() throws IOException
      Description copied from interface: BufferSource
      删除并返回直到下一个换行符(但不包括该换行符)的字符。 换行符为 "\n""\r\n";这些字符不包含在结果中。
      
         Buffer buffer = new Buffer()
             .writeUtf8("I'm a hacker!\n")
             .writeUtf8("That's what I said: you're a nerd.\n")
             .writeUtf8("I prefer to be called a hacker!\n");
         assertEquals(81, buffer.size());
      
         assertEquals("I'm a hacker!", buffer.readUtf8Line());
         assertEquals(67, buffer.size());
      
         assertEquals("That's what I said: you're a nerd.", buffer.readUtf8Line());
         assertEquals(32, buffer.size());
      
         assertEquals("I prefer to be called a hacker!", buffer.readUtf8Line());
         assertEquals(0, buffer.size());
      
         assertEquals(null, buffer.readUtf8Line());
         assertEquals(0, buffer.size());
       
      在流的末尾,此方法返回 null, 就像 BufferedReader 一样。 如果源未以换行符结尾,则假定为隐式换行符。一旦源耗尽,将返回 Null。将此方法用于人工生成的数据,其中尾随换行符是可选的。
      Specified by:
      readUtf8Line in interface BufferSource
      Returns:
      the string
      Throws:
      IOException - 异常
    • readUtf8LineStrict

      public String readUtf8LineStrict() throws IOException
      Description copied from interface: BufferSource
      删除并返回直到下一个换行符(但不包括该换行符)的字符。 换行符为 "\n""\r\n";这些字符不包含在结果中
      Specified by:
      readUtf8LineStrict in interface BufferSource
      Returns:
      the string
      Throws:
      IOException - 异常
    • readUtf8LineStrict

      public String readUtf8LineStrict(long limit) throws IOException
      Description copied from interface: BufferSource
      BufferSource.readUtf8LineStrict() 类似,不同之处在于它允许调用者指定允许的最长匹配。 使用它来防止可能不包含 "\n""\r\n" 的流。
      
         Buffer buffer = new Buffer();
         buffer.writeUtf8("12345\r\n");
      
         // This will throw! There must be \r\n or \n at the limit or before it.
         buffer.readUtf8LineStrict(4);
      
         // No bytes have been consumed so the caller can retry.
         assertEquals("12345", buffer.readUtf8LineStrict(5));
       
      Specified by:
      readUtf8LineStrict in interface BufferSource
      Parameters:
      limit - 限制
      Returns:
      the string
      Throws:
      IOException - 异常
    • readUtf8CodePoint

      public int readUtf8CodePoint() throws IOException
      Description copied from interface: BufferSource
      删除并返回单个 UTF-8 代码点,根据需要读取 1 到 4 个字节。 如果此源不是以正确编码的 UTF-8 代码点开头,则此方法将删除 1 个或多个非 UTF-8 字节并返回替换字符 (U+FFFD)。 这包括编码问题(输入不是正确编码的 UTF-8)、字符超出范围(超出 Unicode 的 0x10ffff 限制)、UTF-16 代理的代码 点 (U+d800..U+dfff) 和过长编码(例如,修改版 UTF-8 中的 NUL 字符为 0xc080
      Specified by:
      readUtf8CodePoint in interface BufferSource
      Returns:
      the int
      Throws:
      IOException - 异常
    • readShort

      public short readShort() throws IOException
      Description copied from interface: BufferSource
      从此源中删除两个字节并返回一个短整型
      
         Buffer buffer = new Buffer()
             .writeByte(0x7f)
             .writeByte(0xff)
             .writeByte(0x00)
             .writeByte(0x0f);
         assertEquals(4, buffer.size());
      
         assertEquals(32767, buffer.readShort());
         assertEquals(2, buffer.size());
      
         assertEquals(15, buffer.readShort());
         assertEquals(0, buffer.size());
       
      Specified by:
      readShort in interface BufferSource
      Returns:
      the short
      Throws:
      IOException - 异常
    • readShortLe

      public short readShortLe() throws IOException
      Description copied from interface: BufferSource
      从此源中删除两个字节并返回一个整型
      
         Buffer buffer = new Buffer()
             .writeByte(0xff)
             .writeByte(0x7f)
             .writeByte(0x0f)
             .writeByte(0x00);
         assertEquals(4, buffer.size());
      
         assertEquals(32767, buffer.readShortLe());
         assertEquals(2, buffer.size());
      
         assertEquals(15, buffer.readShortLe());
         assertEquals(0, buffer.size());
       
      Specified by:
      readShortLe in interface BufferSource
      Returns:
      the short
      Throws:
      IOException - 异常
    • readInt

      public int readInt() throws IOException
      Description copied from interface: BufferSource
      从此源中删除四个字节并返回一个大整数
      
         Buffer buffer = new Buffer()
             .writeByte(0x7f)
             .writeByte(0xff)
             .writeByte(0xff)
             .writeByte(0xff)
             .writeByte(0x00)
             .writeByte(0x00)
             .writeByte(0x00)
             .writeByte(0x0f);
         assertEquals(8, buffer.size());
      
         assertEquals(2147483647, buffer.readInt());
         assertEquals(4, buffer.size());
      
         assertEquals(15, buffer.readInt());
         assertEquals(0, buffer.size());
       
      Specified by:
      readInt in interface BufferSource
      Returns:
      the int
      Throws:
      IOException
    • readIntLe

      public int readIntLe() throws IOException
      Description copied from interface: BufferSource
      从该源中删除四个字节并返回一个小整数
      
         Buffer buffer = new Buffer()
             .writeByte(0xff)
             .writeByte(0xff)
             .writeByte(0xff)
             .writeByte(0x7f)
             .writeByte(0x0f)
             .writeByte(0x00)
             .writeByte(0x00)
             .writeByte(0x00);
         assertEquals(8, buffer.size());
      
         assertEquals(2147483647, buffer.readIntLe());
         assertEquals(4, buffer.size());
      
         assertEquals(15, buffer.readIntLe());
         assertEquals(0, buffer.size());
       
      Specified by:
      readIntLe in interface BufferSource
      Returns:
      the int
      Throws:
      IOException
    • readLong

      public long readLong() throws IOException
      Description copied from interface: BufferSource
      该源中删除八个字节并返回一个大长整型
      
         Buffer buffer = new Buffer()
             .writeByte(0x7f)
             .writeByte(0xff)
             .writeByte(0xff)
             .writeByte(0xff)
             .writeByte(0xff)
             .writeByte(0xff)
             .writeByte(0xff)
             .writeByte(0xff)
             .writeByte(0x00)
             .writeByte(0x00)
             .writeByte(0x00)
             .writeByte(0x00)
             .writeByte(0x00)
             .writeByte(0x00)
             .writeByte(0x00)
             .writeByte(0x0f);
         assertEquals(16, buffer.size());
      
         assertEquals(9223372036854775807L, buffer.readLong());
         assertEquals(8, buffer.size());
      
         assertEquals(15, buffer.readLong());
         assertEquals(0, buffer.size());
       
      Specified by:
      readLong in interface BufferSource
      Returns:
      the long
      Throws:
      IOException
    • readLongLe

      public long readLongLe() throws IOException
      Description copied from interface: BufferSource
      从此源中删除八个字节并返回一个小长整型
      
         Buffer buffer = new Buffer()
             .writeByte(0xff)
             .writeByte(0xff)
             .writeByte(0xff)
             .writeByte(0xff)
             .writeByte(0xff)
             .writeByte(0xff)
             .writeByte(0xff)
             .writeByte(0x7f)
             .writeByte(0x0f)
             .writeByte(0x00)
             .writeByte(0x00)
             .writeByte(0x00)
             .writeByte(0x00)
             .writeByte(0x00)
             .writeByte(0x00)
             .writeByte(0x00);
         assertEquals(16, buffer.size());
      
         assertEquals(9223372036854775807L, buffer.readLongLe());
         assertEquals(8, buffer.size());
      
         assertEquals(15, buffer.readLongLe());
         assertEquals(0, buffer.size());
       
      Specified by:
      readLongLe in interface BufferSource
      Returns:
      the long
      Throws:
      IOException
    • readDecimalLong

      public long readDecimalLong() throws IOException
      Description copied from interface: BufferSource
      以有符号十进制形式从此源读取一个长整型值(即以十进制为基数的字符串,前导字符可选为“-”)。此操作将不断迭代,直到找到非数字字符。
      
         Buffer buffer = new Buffer()
             .writeUtf8("8675309 -123 00001");
      
         assertEquals(8675309L, buffer.readDecimalLong());
         assertEquals(' ', buffer.readByte());
         assertEquals(-123L, buffer.readDecimalLong());
         assertEquals(' ', buffer.readByte());
         assertEquals(1L, buffer.readDecimalLong());
       
      Specified by:
      readDecimalLong in interface BufferSource
      Returns:
      the long
      Throws:
      IOException
    • readHexadecimalUnsignedLong

      public long readHexadecimalUnsignedLong() throws IOException
      Description copied from interface: BufferSource
      以十六进制形式(即以 16 进制表示的字符串)读取此源的长格式。此过程将不断迭代,直到找到非十六进制字符
      
         Buffer buffer = new Buffer()
             .writeUtf8("ffff CAFEBABE 10");
      
         assertEquals(65535L, buffer.readHexadecimalUnsignedLong());
         assertEquals(' ', buffer.readByte());
         assertEquals(0xcafebabeL, buffer.readHexadecimalUnsignedLong());
         assertEquals(' ', buffer.readByte());
         assertEquals(0x10L, buffer.readHexadecimalUnsignedLong());
       
      Specified by:
      readHexadecimalUnsignedLong in interface BufferSource
      Returns:
      the long
      Throws:
      IOException
    • skip

      public void skip(long byteCount) throws IOException
      Description copied from interface: BufferSource
      从此源读取并丢弃 byteCount 个字节
      Specified by:
      skip in interface BufferSource
      Parameters:
      byteCount - 字节数
      Throws:
      IOException - 如果在跳过请求的字节之前源已耗尽,则抛出。
    • indexOf

      public long indexOf(byte b) throws IOException
      Description copied from interface: BufferSource
      Equivalent to indexOf(b, 0).
      Specified by:
      indexOf in interface BufferSource
      Parameters:
      b -
      Returns:
      the long
      Throws:
      IOException - 异常
    • indexOf

      public long indexOf(byte b, long fromIndex) throws IOException
      Description copied from interface: BufferSource
      返回缓冲区中第一个 b 的索引,位于 fromIndex 处或之后。 这会根据需要扩展缓冲区,直到找到 b。这会将无限数量的字节读入缓冲区。如果在找到请求的字节之前流已耗尽,则返回 -1。
      
         Buffer buffer = new Buffer();
         buffer.writeUtf8("Don't move! He can't see us if we don't move.");
      
         byte m = 'm';
         assertEquals(6,  buffer.indexOf(m));
         assertEquals(40, buffer.indexOf(m, 12));
       
      Specified by:
      indexOf in interface BufferSource
      Parameters:
      b -
      fromIndex -
      Returns:
      the long
      Throws:
      IOException - 异常
    • indexOf

      public long indexOf(byte b, long fromIndex, long toIndex) throws IOException
      Description copied from interface: BufferSource
      如果在 fromIndextoIndex 范围内找到 b,则返回其索引。 如果未找到 b,或者 fromIndex == toIndex,则返回 -1。
      Specified by:
      indexOf in interface BufferSource
      Parameters:
      b - 字节
      fromIndex - 开始索引
      toIndex - 目标索引
      Returns:
      the long
      Throws:
      IOException - 异常
    • indexOf

      public long indexOf(ByteString bytes) throws IOException
      Description copied from interface: BufferSource
      相当于indexOf(bytes, 0)
      Specified by:
      indexOf in interface BufferSource
      Parameters:
      bytes - 字节
      Returns:
      the long
      Throws:
      IOException - 异常
    • indexOf

      public long indexOf(ByteString bytes, long fromIndex) throws IOException
      Description copied from interface: BufferSource
      返回缓冲区中 bytes 的第一个匹配项的索引,位于 fromIndex 处或之后。 这会根据需要扩展缓冲区,直到找到 bytes。这会将无限数量的字节读入缓冲区。如果在找到请求的字节之前流已耗尽,则返回 -1。
      
         ByteString MOVE = ByteString.encodeUtf8("move");
         Buffer buffer = new Buffer();
         buffer.writeUtf8("Don't move! He can't see us if we don't move.");
      
         assertEquals(6,  buffer.indexOf(MOVE));
         assertEquals(40, buffer.indexOf(MOVE, 12));
       
      Specified by:
      indexOf in interface BufferSource
      Parameters:
      bytes - 字节
      fromIndex - 字节索引
      Returns:
      the long
      Throws:
      IOException - 异常
    • indexOfElement

      public long indexOfElement(ByteString targetBytes) throws IOException
      Description copied from interface: BufferSource
      Specified by:
      indexOfElement in interface BufferSource
      Parameters:
      targetBytes - 目标字节
      Returns:
      the long
      Throws:
      IOException - 异常
    • indexOfElement

      public long indexOfElement(ByteString targetBytes, long fromIndex) throws IOException
      Description copied from interface: BufferSource
      返回此缓冲区中位于 fromIndex 或之后且包含 targetBytes 中任意字节的第一个索引。 这会根据需要扩展缓冲区,直到找到目标字节。这会将无限数量的字节读入缓冲区。如果在找到请求的字节之前流已耗尽,则返回 -1。
      
         ByteString ANY_VOWEL = ByteString.encodeUtf8("AEOIUaeoiu");
         Buffer buffer = new Buffer();
         buffer.writeUtf8("Dr. Alan Grant");
      
         assertEquals(4,  buffer.indexOfElement(ANY_VOWEL));    // 'A' in 'Alan'.
         assertEquals(11, buffer.indexOfElement(ANY_VOWEL, 9)); // 'a' in 'Grant'.
       
      Specified by:
      indexOfElement in interface BufferSource
      Parameters:
      targetBytes - 目标字节
      fromIndex - 开始索引
      Returns:
      the long
      Throws:
      IOException - 异常
    • rangeEquals

      public boolean rangeEquals(long offset, ByteString bytes) throws IOException
      Description copied from interface: BufferSource
      如果此源中 offset 处的字节等于 bytes,则返回 true。 这会根据需要扩展缓冲区,直到某个字节不匹配、所有字节都匹配,或者在足够的字节确定匹配之前流已耗尽。
      
         ByteString simonSays = ByteString.encodeUtf8("Simon says:");
         Buffer standOnOneLeg = new Buffer().writeUtf8("Simon says: Stand on one leg.");
         assertTrue(standOnOneLeg.rangeEquals(0, simonSays));
      
         Buffer payMeMoney = new Buffer().writeUtf8("Pay me $1,000,000.");
         assertFalse(payMeMoney.rangeEquals(0, simonSays));
       
      Specified by:
      rangeEquals in interface BufferSource
      Parameters:
      offset - 偏移量
      bytes - 字节
      Returns:
      Throws:
      IOException - 异常
    • rangeEquals

      public boolean rangeEquals(long offset, ByteString bytes, int bytesOffset, int byteCount) throws IOException
      Description copied from interface: BufferSource
      如果此源中 offset 处的 byteCount 个字节等于 bytesOffset 处的 bytes,则返回 true。 这会根据需要扩展缓冲区,直到某个字节不匹配、所有字节都匹配,或者在足够的字节确定匹配之前流已耗尽。
      Specified by:
      rangeEquals in interface BufferSource
      Parameters:
      offset - 偏移量
      bytes - 字节
      bytesOffset - 字节偏移量
      byteCount - 字节数
      Returns:
      the true/false
      Throws:
      IOException - 异常
    • peek

      public BufferSource peek()
      Description copied from interface: BufferSource
      返回一个新的 BufferedSource,可从此 BufferedSource读取数据但不使用它。 一旦下次读取或关闭此源,返回的源将变为无效。
       
         Buffer buffer = new Buffer();
         buffer.writeUtf8("abcdefghi");
         buffer.readUtf8(3) // returns "abc", buffer contains "defghi"
      
         BufferedSource peek = buffer.peek();
         peek.readUtf8(3); // returns "def", buffer contains "defghi"
         peek.readUtf8(3); // returns "ghi", buffer contains "defghi"
         buffer.readUtf8(3); // returns "def", buffer contains "ghi"
       
      Specified by:
      peek in interface BufferSource
      Returns:
      BufferSource
    • inputStream

      public InputStream inputStream()
      Description copied from interface: BufferSource
      返回从该源读取的输入流
      Specified by:
      inputStream in interface BufferSource
      Returns:
      InputStream
    • isOpen

      public boolean isOpen()
      Specified by:
      isOpen in interface Channel
    • close

      public void close() throws IOException
      Description copied from interface: Source
      关闭此源并释放此源持有的资源. 读取闭源是一个错误。多次关闭源是安全的.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Channel
      Specified by:
      close in interface Closeable
      Specified by:
      close in interface Source
      Throws:
      IOException - 异常
    • timeout

      public Timeout timeout()
      Description copied from interface: Source
      返回此源的超时时间.
      Specified by:
      timeout in interface Source
      Returns:
      超时时间
    • toString

      public String toString()
      Overrides:
      toString in class Object