Package org.miaixz.bus.core.io.buffer
Class Buffer
java.lang.Object
org.miaixz.bus.core.io.buffer.Buffer
- All Implemented Interfaces:
Closeable,Flushable,AutoCloseable,Cloneable,ByteChannel,Channel,ReadableByteChannel,WritableByteChannel,BufferSink,Sink,BufferSource,Source
内存中字节的集合.
- Since:
- Java 17+
- Author:
- Kimi Liu
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescription头部信息static final intlong信息大小 -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbuffer()Returns this sink's internal buffer.final voidclear()丢弃此缓冲区中的所有字节。在使用完缓冲区后调用此方法将把它的段返回到池中clone()Returns a deep copy of this buffer.voidclose()关闭此源并释放此源持有的资源.final longReturns the number of bytes in segments that are not writable.final BuffercopyTo(OutputStream out) 将其内容复制到out.final BuffercopyTo(OutputStream out, long offset, long byteCount) 从这里复制byteCount字节,从offset开始,复制到out.final Buffer从这里复制byteCount字节,从offset开始,复制到out.emit()Writes all buffered data to the underlying sink, if one exists.Writes complete segments to the underlying sink, if one exists.booleanboolean如果此源中没有更多字节,则返回 true。 这将阻塞,直到有字节可读取或源确实已耗尽voidflush()Writes all buffered data to the underlying sink, if one exists.该源的内部缓冲区final bytegetByte(long pos) 返回pos处的字节.inthashCode()hmacSha1(ByteString key) hmacSha256(ByteString key) final ByteStringhmacSha512(ByteString key) longindexOf(byte b) Equivalent toindexOf(b, 0).longindexOf(byte b, long fromIndex) Returns the index ofbin this at or beyondfromIndex, or -1 if this buffer does not containbin that range.longindexOf(byte b, long fromIndex, long toIndex) 如果在fromIndex到toIndex范围内找到b,则返回其索引。 如果未找到b,或者fromIndex == toIndex,则返回 -1。longindexOf(ByteString bytes) longindexOf(ByteString bytes, long fromIndex) 返回缓冲区中bytes的第一个匹配项的索引,位于fromIndex处或之后。 这会根据需要扩展缓冲区,直到找到bytes。这会将无限数量的字节读入缓冲区。如果在找到请求的字节之前流已耗尽,则返回 -1。longindexOfElement(ByteString targetBytes) longindexOfElement(ByteString targetBytes, long fromIndex) 返回此缓冲区中位于fromIndex或之后且包含targetBytes中任意字节的第一个索引。 这会根据需要扩展缓冲区,直到找到目标字节。这会将无限数量的字节读入缓冲区。如果在找到请求的字节之前流已耗尽,则返回 -1。返回从该源读取的输入流booleanisOpen()md5()Returns an output stream that writes to this sink.peek()返回一个新的BufferedSource,可从此BufferedSource读取数据但不使用它。 一旦下次读取或关闭此源,返回的源将变为无效。booleanrangeEquals(long offset, ByteString bytes) 如果此源中offset处的字节等于bytes,则返回 true。 这会根据需要扩展缓冲区,直到某个字节不匹配、所有字节都匹配,或者在足够的字节确定匹配之前流已耗尽。booleanrangeEquals(long offset, ByteString bytes, int bytesOffset, int byteCount) 如果此源中offset处的byteCount个字节等于bytesOffset处的bytes,则返回 true。 这会根据需要扩展缓冲区,直到某个字节不匹配、所有字节都匹配,或者在足够的字节确定匹配之前流已耗尽。intread(byte[] sink) 从中移除最多sink.length个字节并将其复制到sink。 返回读取的字节数,如果此源已耗尽,则返回 -1。intread(byte[] sink, int offset, int byteCount) 从此处删除最多byteCount个字节并将其复制到offset处的sink。 返回读取的字节数,如果此源已耗尽,则返回 -1。intread(ByteBuffer sink) long从中删除至少1个字节,最多为byteCount字节, 并将它们 附加到sink。返回读取的字节数,如果该源已耗尽,则返回-1long从中删除所有字节并将其附加到sink。返回写入sink的总字节数,如果已用尽,则为 0。readAndWriteUnsafe(Buffer.UnsafeCursor unsafeCursor) bytereadByte()从该源中删除一个字节并返回它byte[]从中删除所有字节并将它们作为字节数组返回。byte[]readByteArray(long byteCount) 从中删除byteCount个字节并将其作为字节数组返回。从中删除所有字节并将它们作为字节字符串返回readByteString(long byteCount) 从中删除byteCount个字节并将其作为字节字符串返回。long以有符号十进制形式从此源读取一个长整型值(即以十进制为基数的字符串,前导字符可选为“-”)。此操作将不断迭代,直到找到非数字字符。final BufferreadFrom(InputStream in) 将in中的字节读入并转为bytesfinal BufferreadFrom(InputStream in, long byteCount) ReadbyteCountbytes frominto this.voidreadFully(byte[] sink) voidlong以十六进制形式(即以 16 进制表示的字符串)读取此源的长格式。此过程将不断迭代,直到找到非十六进制字符intreadInt()从此源中删除四个字节并返回一个大整数int从该源中删除四个字节并返回一个小整数longreadLong()该源中删除八个字节并返回一个大长整型long从此源中删除八个字节并返回一个小长整型short从此源中删除两个字节并返回一个短整型short从此源中删除两个字节并返回一个整型readString(long byteCount, Charset charset) 从中删除byteCount个字节,将其解码为charset,并返回字符串。readString(Charset charset) 从中删除所有字节,将其解码为charset,并返回字符串。readUnsafe(Buffer.UnsafeCursor unsafeCursor) readUtf8()从中删除所有字节,将其解码为 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";这些字符不包含在结果中。readUtf8Line(long newline) 删除并返回直到下一个换行符(但不包括该换行符)的字符。 换行符为"\n"或"\r\n";这些字符不包含在结果中readUtf8LineStrict(long limit) booleanrequest(long byteCount) 如果缓冲区至少包含byteCount个字节,则返回 true,并根据需要对其进行扩展。 如果在读取请求的字节之前源已耗尽,则返回 false。voidrequire(long byteCount) 当缓冲区至少包含byteCount个字节时返回。 如果在读取所需字节之前源已耗尽,则抛出EOFException。intselect(SegmentBuffer segmentBuffer) 在options中查找第一个作为此缓冲区前缀的字符串,从此缓冲区中使用它,并返回其索引。 如果options中没有字节字符串是此缓冲区的前缀,则返回 -1,并且不消耗任何字节。 如果事先知道预期值集,则可以将其用作BufferSource.readByteString()甚至BufferSource.readUtf8()的替代。intselectPrefix(SegmentBuffer segmentBuffer, boolean selectTruncated) 返回此缓冲区前缀的选项中的值的索引。如果没有找到值,则返回-1 此方法执行两个同步迭代:迭代trie和迭代这个缓冲区。当它在trie中到达一个结果时, 当它在trie中不匹配时,以及当缓冲区耗尽时,它将返回sha1()sha256()sha512()final longsize()voidskip(long byteCount) 从这个缓冲区的头部丢弃byteCount字节.snapshot()Returns an immutable copy of this buffer as a byte string.snapshot(int byteCount) Returns an immutable copy of the firstbyteCountbytes of this buffer as a byte string.timeout()返回此源的超时时间.toString()Returns a human-readable string that describes the contents of this buffer.writableSegment(int minimumCapacity) write(byte[] source) LikeOutputStream.write(byte[]), this writes a complete byte array to this sink.write(byte[] source, int offset, int byteCount) LikeOutputStream.write(byte[], int, int), this writesbyteCountbytes ofsource, starting atoffset.intwrite(ByteBuffer source) voidRemovesbyteCountbytes fromsourceand appends them to this.write(ByteString byteString) RemovesbyteCountbytes fromsourceand appends them to this sink.longRemoves all bytes fromsourceand appends them to this sink.writeByte(int b) Writes a byte to this sink.writeDecimalLong(long v) Writes a long to this sink in signed decimal form (i.e., as a string in base 10).writeHexadecimalUnsignedLong(long v) Writes a long to this sink in hexadecimal form (i.e., as a string in base 16).writeInt(int i) Writes a big-endian int to this sink using four bytes.writeIntLe(int i) Writes a little-endian int to this sink using four bytes.writeLong(long v) Writes a big-endian long to this sink using eight bytes.writeLongLe(long v) Writes a little-endian long to this sink using eight bytes.writeShort(int s) Writes a big-endian short to this sink using two bytes.writeShortLe(int s) Writes a little-endian short to this sink using two bytes.writeString(String string, int beginIndex, int endIndex, Charset charset) Encodes the characters atbeginIndexup toendIndexfromstringincharsetand writes it to this sink.writeString(String string, Charset charset) Encodesstringincharsetand writes it to this sink.final BufferwriteTo(OutputStream out) 将其内容写入out.final BufferwriteTo(OutputStream out, long byteCount) 将byteCount字节写入out.Encodesstringin UTF-8 and writes it to this sink.Encodes the characters atbeginIndexup toendIndexfromstringin UTF-8 and writes it to this sink.writeUtf8CodePoint(int codePoint) EncodescodePointin UTF-8 and writes it to this sink.
-
Field Details
-
REPLACEMENT_CHARACTER
public static final int REPLACEMENT_CHARACTER- See Also:
-
head
头部信息 -
size
public long size信息大小
-
-
Constructor Details
-
Buffer
public Buffer()
-
-
Method Details
-
size
public final long size() -
buffer
Description copied from interface:BufferSinkReturns this sink's internal buffer.- Specified by:
bufferin interfaceBufferSink
-
getBuffer
Description copied from interface:BufferSource该源的内部缓冲区- Specified by:
getBufferin interfaceBufferSource- Returns:
Buffer
-
outputStream
Description copied from interface:BufferSinkReturns an output stream that writes to this sink.- Specified by:
outputStreamin interfaceBufferSink
-
emitCompleteSegments
Description copied from interface:BufferSinkWrites complete segments to the underlying sink, if one exists. LikeBufferSink.flush(), but weaker. Use this to limit the memory held in the buffer to a single segment. Typically application code will not need to call this: it is only necessary when application code writes directly to this sink's buffer.BufferedSink b0 = new Buffer(); BufferedSink b1 = Okio.buffer(b0); BufferedSink b2 = Okio.buffer(b1); b2.buffer().write(new byte[20_000]); assertEquals(20_000, b2.buffer().size()); assertEquals(0, b1.buffer().size()); assertEquals(0, b0.buffer().size()); b2.emitCompleteSegments(); assertEquals(3_616, b2.buffer().size()); assertEquals(0, b1.buffer().size()); assertEquals(16_384, b0.buffer().size()); // This example assumes 8192 byte segments.- Specified by:
emitCompleteSegmentsin interfaceBufferSink
-
emit
Description copied from interface:BufferSinkWrites all buffered data to the underlying sink, if one exists. LikeBufferSink.flush(), but weaker. Call this before this buffered sink goes out of scope so that its data can reach its destination.BufferedSink b0 = new Buffer(); BufferedSink b1 = Okio.buffer(b0); BufferedSink b2 = Okio.buffer(b1); b2.writeUtf8("hello"); assertEquals(5, b2.buffer().size()); assertEquals(0, b1.buffer().size()); assertEquals(0, b0.buffer().size()); b2.emit(); assertEquals(0, b2.buffer().size()); assertEquals(5, b1.buffer().size()); assertEquals(0, b0.buffer().size()); b1.emit(); assertEquals(0, b2.buffer().size()); assertEquals(0, b1.buffer().size()); assertEquals(5, b0.buffer().size());- Specified by:
emitin interfaceBufferSink
-
exhausted
public boolean exhausted()Description copied from interface:BufferSource如果此源中没有更多字节,则返回 true。 这将阻塞,直到有字节可读取或源确实已耗尽- Specified by:
exhaustedin interfaceBufferSource- Returns:
- the true/false
-
require
Description copied from interface:BufferSource当缓冲区至少包含byteCount个字节时返回。 如果在读取所需字节之前源已耗尽,则抛出EOFException。- Specified by:
requirein interfaceBufferSource- Parameters:
byteCount- 字节数- Throws:
EOFException
-
request
public boolean request(long byteCount) Description copied from interface:BufferSource如果缓冲区至少包含byteCount个字节,则返回 true,并根据需要对其进行扩展。 如果在读取请求的字节之前源已耗尽,则返回 false。- Specified by:
requestin interfaceBufferSource- Parameters:
byteCount- 字节数- Returns:
- the true/false
-
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:
peekin interfaceBufferSource- Returns:
BufferSource
-
inputStream
Description copied from interface:BufferSource返回从该源读取的输入流- Specified by:
inputStreamin interfaceBufferSource- Returns:
InputStream
-
copyTo
将其内容复制到out.- Parameters:
out- 输出流- Returns:
- Buffer 内容
- Throws:
IOException- 抛出异常
-
copyTo
从这里复制byteCount字节,从offset开始,复制到out.- Parameters:
out- 输出流offset- 偏移量byteCount- 偏移量- Returns:
- Buffer 内容
- Throws:
IOException- 抛出异常
-
copyTo
从这里复制byteCount字节,从offset开始,复制到out.- Parameters:
out- 输出流offset- 偏移量byteCount- 偏移量- Returns:
- Buffer 内容
-
writeTo
将其内容写入out.- Parameters:
out- 输出流- Returns:
- Buffer 内容
- Throws:
IOException- 抛出异常
-
writeTo
将byteCount字节写入out.- Parameters:
out- 输出流byteCount- 偏移量- Returns:
- Buffer 内容
- Throws:
IOException- 抛出异常
-
readFrom
将in中的字节读入并转为bytes- Parameters:
in- 输入流- Returns:
- Buffer 内容
- Throws:
IOException- 抛出异常
-
readFrom
ReadbyteCountbytes frominto this.- Parameters:
in- 输入流byteCount- 偏移量- Returns:
- Buffer 内容
- Throws:
IOException- 抛出异常
-
completeSegmentByteCount
public final long completeSegmentByteCount()Returns the number of bytes in segments that are not writable. This is the number of bytes that can be flushed immediately to an underlying sink without harming throughput. -
readByte
public byte readByte()Description copied from interface:BufferSource从该源中删除一个字节并返回它- Specified by:
readBytein interfaceBufferSource- Returns:
- the true/false
-
getByte
public final byte getByte(long pos) 返回pos处的字节.- Parameters:
pos- long- Returns:
- byte 内容
-
readShort
public short readShort()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:
readShortin interfaceBufferSource- Returns:
- the short
-
readInt
public int readInt()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:
readIntin interfaceBufferSource- Returns:
- the int
-
readLong
public long readLong()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:
readLongin interfaceBufferSource- Returns:
- the long
-
readShortLe
public short readShortLe()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:
readShortLein interfaceBufferSource- Returns:
- the short
-
readIntLe
public int readIntLe()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:
readIntLein interfaceBufferSource- Returns:
- the int
-
readLongLe
public long readLongLe()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:
readLongLein interfaceBufferSource- Returns:
- the long
-
readDecimalLong
public long readDecimalLong()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:
readDecimalLongin interfaceBufferSource- Returns:
- the long
-
readHexadecimalUnsignedLong
public long readHexadecimalUnsignedLong()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:
readHexadecimalUnsignedLongin interfaceBufferSource- Returns:
- the long
-
readByteString
Description copied from interface:BufferSource从中删除所有字节并将它们作为字节字符串返回- Specified by:
readByteStringin interfaceBufferSource- Returns:
- the
ByteString
-
readByteString
Description copied from interface:BufferSource从中删除byteCount个字节并将其作为字节字符串返回。- Specified by:
readByteStringin interfaceBufferSource- Returns:
- the
ByteString - Throws:
EOFException
-
select
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:
selectin interfaceBufferSource- Parameters:
segmentBuffer- 索引值- Returns:
- the int
-
selectPrefix
返回此缓冲区前缀的选项中的值的索引。如果没有找到值,则返回-1 此方法执行两个同步迭代:迭代trie和迭代这个缓冲区。当它在trie中到达一个结果时, 当它在trie中不匹配时,以及当缓冲区耗尽时,它将返回- Parameters:
selectTruncated- 如果可能的结果出现但被截断,则true返回-2 例如,如果缓冲区包含[ab],并且选项是[abc, abd],则返回-2 请注意,由于选项是按优先顺序列出的,而且第一个选项可能是另一个选项的前缀, 这使得情况变得复杂。例如,如果缓冲区包含[ab]而选项是[abc, a],则返回-2
-
readFully
Description copied from interface:BufferSource- Specified by:
readFullyin interfaceBufferSource- Parameters:
sink- 字节集合byteCount- 字节数- Throws:
EOFException
-
readAll
Description copied from interface:BufferSource从中删除所有字节并将其附加到sink。返回写入sink的总字节数,如果已用尽,则为 0。- Specified by:
readAllin interfaceBufferSource- Parameters:
sink- 字节集合- Returns:
- the long
- Throws:
IOException- 异常
-
readUtf8
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:
readUtf8in interfaceBufferSource- Returns:
- the string
-
readUtf8
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:
readUtf8in interfaceBufferSource- Parameters:
byteCount- 字节数- Returns:
- the string
- Throws:
EOFException
-
readString
Description copied from interface:BufferSource从中删除所有字节,将其解码为charset,并返回字符串。- Specified by:
readStringin interfaceBufferSource- Parameters:
charset- 字符编码- Returns:
- the string
-
readString
Description copied from interface:BufferSource从中删除byteCount个字节,将其解码为charset,并返回字符串。- Specified by:
readStringin interfaceBufferSource- Parameters:
byteCount- 字节数charset- 字符编码- Returns:
- the string
- Throws:
EOFException
-
readUtf8Line
Description copied from interface:BufferSource删除并返回直到下一个换行符(但不包括该换行符)的字符。 换行符为"\n"或"\r\n";这些字符不包含在结果中。
在流的末尾,此方法返回 null, 就像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());BufferedReader一样。 如果源未以换行符结尾,则假定为隐式换行符。一旦源耗尽,将返回 Null。将此方法用于人工生成的数据,其中尾随换行符是可选的。- Specified by:
readUtf8Linein interfaceBufferSource- Returns:
- the string
- Throws:
EOFException
-
readUtf8LineStrict
Description copied from interface:BufferSource删除并返回直到下一个换行符(但不包括该换行符)的字符。 换行符为"\n"或"\r\n";这些字符不包含在结果中- Specified by:
readUtf8LineStrictin interfaceBufferSource- Returns:
- the string
- Throws:
EOFException
-
readUtf8LineStrict
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:
readUtf8LineStrictin interfaceBufferSource- Parameters:
limit- 限制- Returns:
- the string
- Throws:
EOFException
-
readUtf8Line
- Throws:
EOFException
-
readUtf8CodePoint
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:
readUtf8CodePointin interfaceBufferSource- Returns:
- the int
- Throws:
EOFException
-
readByteArray
public byte[] readByteArray()Description copied from interface:BufferSource从中删除所有字节并将它们作为字节数组返回。- Specified by:
readByteArrayin interfaceBufferSource- Returns:
- the byte
-
readByteArray
Description copied from interface:BufferSource从中删除byteCount个字节并将其作为字节数组返回。- Specified by:
readByteArrayin interfaceBufferSource- Returns:
- the byte
- Throws:
EOFException
-
read
public int read(byte[] sink) Description copied from interface:BufferSource从中移除最多sink.length个字节并将其复制到sink。 返回读取的字节数,如果此源已耗尽,则返回 -1。- Specified by:
readin interfaceBufferSource- Parameters:
sink- 字节集合- Returns:
- the int
-
readFully
Description copied from interface:BufferSource- Specified by:
readFullyin interfaceBufferSource- Parameters:
sink- 字节集合- Throws:
EOFException
-
read
public int read(byte[] sink, int offset, int byteCount) Description copied from interface:BufferSource从此处删除最多byteCount个字节并将其复制到offset处的sink。 返回读取的字节数,如果此源已耗尽,则返回 -1。- Specified by:
readin interfaceBufferSource- Parameters:
sink- 字节集合offset- 偏移位byteCount- 字节数- Returns:
- the int
-
read
- Specified by:
readin interfaceReadableByteChannel- Throws:
IOException
-
clear
public final void clear()丢弃此缓冲区中的所有字节。在使用完缓冲区后调用此方法将把它的段返回到池中 -
skip
从这个缓冲区的头部丢弃byteCount字节.- Specified by:
skipin interfaceBufferSource- Parameters:
byteCount- 字节数- Throws:
EOFException
-
write
- Specified by:
writein interfaceBufferSink
-
writeUtf8
Description copied from interface:BufferSinkEncodesstringin UTF-8 and writes it to this sink.Buffer buffer = new Buffer(); buffer.writeUtf8("Uh uh uh!"); buffer.writeByte(' '); buffer.writeUtf8("You didn't say the magic word!"); assertEquals("Uh uh uh! You didn't say the magic word!", buffer.readUtf8());- Specified by:
writeUtf8in interfaceBufferSink
-
writeUtf8
Description copied from interface:BufferSinkEncodes the characters atbeginIndexup toendIndexfromstringin UTF-8 and writes it to this sink.Buffer buffer = new Buffer(); buffer.writeUtf8("I'm a hacker!\n", 6, 12); buffer.writeByte(' '); buffer.writeUtf8("That's what I said: you're a nerd.\n", 29, 33); buffer.writeByte(' '); buffer.writeUtf8("I prefer to be called a hacker!\n", 24, 31); assertEquals("hacker nerd hacker!", buffer.readUtf8());- Specified by:
writeUtf8in interfaceBufferSink
-
writeUtf8CodePoint
Description copied from interface:BufferSinkEncodescodePointin UTF-8 and writes it to this sink.- Specified by:
writeUtf8CodePointin interfaceBufferSink
-
writeString
Description copied from interface:BufferSinkEncodesstringincharsetand writes it to this sink.- Specified by:
writeStringin interfaceBufferSink
-
writeString
Description copied from interface:BufferSinkEncodes the characters atbeginIndexup toendIndexfromstringincharsetand writes it to this sink.- Specified by:
writeStringin interfaceBufferSink
-
write
Description copied from interface:BufferSinkLikeOutputStream.write(byte[]), this writes a complete byte array to this sink.- Specified by:
writein interfaceBufferSink
-
write
Description copied from interface:BufferSinkLikeOutputStream.write(byte[], int, int), this writesbyteCountbytes ofsource, starting atoffset.- Specified by:
writein interfaceBufferSink
-
write
- Specified by:
writein interfaceWritableByteChannel- Throws:
IOException
-
writeAll
Description copied from interface:BufferSinkRemoves all bytes fromsourceand appends them to this sink. Returns the number of bytes read which will be 0 ifsourceis exhausted.- Specified by:
writeAllin interfaceBufferSink- Throws:
IOException
-
write
Description copied from interface:BufferSinkRemovesbyteCountbytes fromsourceand appends them to this sink.- Specified by:
writein interfaceBufferSink- Throws:
IOException
-
writeByte
Description copied from interface:BufferSinkWrites a byte to this sink.- Specified by:
writeBytein interfaceBufferSink
-
writeShort
Description copied from interface:BufferSinkWrites a big-endian short to this sink using two bytes.Buffer buffer = new Buffer(); buffer.writeShort(32767); buffer.writeShort(15); assertEquals(4, buffer.size()); assertEquals((byte) 0x7f, buffer.readByte()); assertEquals((byte) 0xff, buffer.readByte()); assertEquals((byte) 0x00, buffer.readByte()); assertEquals((byte) 0x0f, buffer.readByte()); assertEquals(0, buffer.size());- Specified by:
writeShortin interfaceBufferSink
-
writeShortLe
Description copied from interface:BufferSinkWrites a little-endian short to this sink using two bytes.Buffer buffer = new Buffer(); buffer.writeShortLe(32767); buffer.writeShortLe(15); assertEquals(4, buffer.size()); assertEquals((byte) 0xff, buffer.readByte()); assertEquals((byte) 0x7f, buffer.readByte()); assertEquals((byte) 0x0f, buffer.readByte()); assertEquals((byte) 0x00, buffer.readByte()); assertEquals(0, buffer.size());- Specified by:
writeShortLein interfaceBufferSink
-
writeInt
Description copied from interface:BufferSinkWrites a big-endian int to this sink using four bytes.Buffer buffer = new Buffer(); buffer.writeInt(2147483647); buffer.writeInt(15); assertEquals(8, buffer.size()); assertEquals((byte) 0x7f, buffer.readByte()); assertEquals((byte) 0xff, buffer.readByte()); assertEquals((byte) 0xff, buffer.readByte()); assertEquals((byte) 0xff, buffer.readByte()); assertEquals((byte) 0x00, buffer.readByte()); assertEquals((byte) 0x00, buffer.readByte()); assertEquals((byte) 0x00, buffer.readByte()); assertEquals((byte) 0x0f, buffer.readByte()); assertEquals(0, buffer.size());- Specified by:
writeIntin interfaceBufferSink
-
writeIntLe
Description copied from interface:BufferSinkWrites a little-endian int to this sink using four bytes.Buffer buffer = new Buffer(); buffer.writeIntLe(2147483647); buffer.writeIntLe(15); assertEquals(8, buffer.size()); assertEquals((byte) 0xff, buffer.readByte()); assertEquals((byte) 0xff, buffer.readByte()); assertEquals((byte) 0xff, buffer.readByte()); assertEquals((byte) 0x7f, buffer.readByte()); assertEquals((byte) 0x0f, buffer.readByte()); assertEquals((byte) 0x00, buffer.readByte()); assertEquals((byte) 0x00, buffer.readByte()); assertEquals((byte) 0x00, buffer.readByte()); assertEquals(0, buffer.size());- Specified by:
writeIntLein interfaceBufferSink
-
writeLong
Description copied from interface:BufferSinkWrites a big-endian long to this sink using eight bytes.Buffer buffer = new Buffer(); buffer.writeLong(9223372036854775807L); buffer.writeLong(15); assertEquals(16, buffer.size()); assertEquals((byte) 0x7f, buffer.readByte()); assertEquals((byte) 0xff, buffer.readByte()); assertEquals((byte) 0xff, buffer.readByte()); assertEquals((byte) 0xff, buffer.readByte()); assertEquals((byte) 0xff, buffer.readByte()); assertEquals((byte) 0xff, buffer.readByte()); assertEquals((byte) 0xff, buffer.readByte()); assertEquals((byte) 0xff, buffer.readByte()); assertEquals((byte) 0x00, buffer.readByte()); assertEquals((byte) 0x00, buffer.readByte()); assertEquals((byte) 0x00, buffer.readByte()); assertEquals((byte) 0x00, buffer.readByte()); assertEquals((byte) 0x00, buffer.readByte()); assertEquals((byte) 0x00, buffer.readByte()); assertEquals((byte) 0x00, buffer.readByte()); assertEquals((byte) 0x0f, buffer.readByte()); assertEquals(0, buffer.size());- Specified by:
writeLongin interfaceBufferSink
-
writeLongLe
Description copied from interface:BufferSinkWrites a little-endian long to this sink using eight bytes.Buffer buffer = new Buffer(); buffer.writeLongLe(9223372036854775807L); buffer.writeLongLe(15); assertEquals(16, buffer.size()); assertEquals((byte) 0xff, buffer.readByte()); assertEquals((byte) 0xff, buffer.readByte()); assertEquals((byte) 0xff, buffer.readByte()); assertEquals((byte) 0xff, buffer.readByte()); assertEquals((byte) 0xff, buffer.readByte()); assertEquals((byte) 0xff, buffer.readByte()); assertEquals((byte) 0xff, buffer.readByte()); assertEquals((byte) 0x7f, buffer.readByte()); assertEquals((byte) 0x0f, buffer.readByte()); assertEquals((byte) 0x00, buffer.readByte()); assertEquals((byte) 0x00, buffer.readByte()); assertEquals((byte) 0x00, buffer.readByte()); assertEquals((byte) 0x00, buffer.readByte()); assertEquals((byte) 0x00, buffer.readByte()); assertEquals((byte) 0x00, buffer.readByte()); assertEquals((byte) 0x00, buffer.readByte()); assertEquals(0, buffer.size());- Specified by:
writeLongLein interfaceBufferSink
-
writeDecimalLong
Description copied from interface:BufferSinkWrites a long to this sink in signed decimal form (i.e., as a string in base 10).Buffer buffer = new Buffer(); buffer.writeDecimalLong(8675309L); buffer.writeByte(' '); buffer.writeDecimalLong(-123L); buffer.writeByte(' '); buffer.writeDecimalLong(1L); assertEquals("8675309 -123 1", buffer.readUtf8());- Specified by:
writeDecimalLongin interfaceBufferSink
-
writeHexadecimalUnsignedLong
Description copied from interface:BufferSinkWrites a long to this sink in hexadecimal form (i.e., as a string in base 16).Buffer buffer = new Buffer(); buffer.writeHexadecimalUnsignedLong(65535L); buffer.writeByte(' '); buffer.writeHexadecimalUnsignedLong(0xcafebabeL); buffer.writeByte(' '); buffer.writeHexadecimalUnsignedLong(0x10L); assertEquals("ffff cafebabe 10", buffer.readUtf8());- Specified by:
writeHexadecimalUnsignedLongin interfaceBufferSink
-
writableSegment
- Parameters:
minimumCapacity- int- Returns:
- segment SectionBuffer Returns a tail segment that we can write at least
minimumCapacitybytes to, creating it if necessary.
-
write
Description copied from interface:SinkRemovesbyteCountbytes fromsourceand appends them to this. -
read
Description copied from interface:Source从中删除至少1个字节,最多为byteCount字节, 并将它们 附加到sink。返回读取的字节数,如果该源已耗尽,则返回-1 -
indexOf
public long indexOf(byte b) Description copied from interface:BufferSourceEquivalent toindexOf(b, 0).- Specified by:
indexOfin interfaceBufferSource- Parameters:
b-- Returns:
- the long
-
indexOf
public long indexOf(byte b, long fromIndex) Returns the index ofbin this at or beyondfromIndex, or -1 if this buffer does not containbin that range.- Specified by:
indexOfin interfaceBufferSource- Parameters:
b-fromIndex-- Returns:
- the long
-
indexOf
public long indexOf(byte b, long fromIndex, long toIndex) Description copied from interface:BufferSource如果在fromIndex到toIndex范围内找到b,则返回其索引。 如果未找到b,或者fromIndex == toIndex,则返回 -1。- Specified by:
indexOfin interfaceBufferSource- Parameters:
b- 字节fromIndex- 开始索引toIndex- 目标索引- Returns:
- the long
-
indexOf
Description copied from interface:BufferSource- Specified by:
indexOfin interfaceBufferSource- Parameters:
bytes- 字节- Returns:
- the long
- Throws:
IOException- 异常
-
indexOf
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:
indexOfin interfaceBufferSource- Parameters:
bytes- 字节fromIndex- 字节索引- Returns:
- the long
- Throws:
IOException- 异常
-
indexOfElement
Description copied from interface:BufferSource- Specified by:
indexOfElementin interfaceBufferSource- Parameters:
targetBytes- 目标字节- Returns:
- the long
-
indexOfElement
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:
indexOfElementin interfaceBufferSource- Parameters:
targetBytes- 目标字节fromIndex- 开始索引- Returns:
- the long
-
rangeEquals
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:
rangeEqualsin interfaceBufferSource- Parameters:
offset- 偏移量bytes- 字节- Returns:
-
rangeEquals
Description copied from interface:BufferSource如果此源中offset处的byteCount个字节等于bytesOffset处的bytes,则返回 true。 这会根据需要扩展缓冲区,直到某个字节不匹配、所有字节都匹配,或者在足够的字节确定匹配之前流已耗尽。- Specified by:
rangeEqualsin interfaceBufferSource- Parameters:
offset- 偏移量bytes- 字节bytesOffset- 字节偏移量byteCount- 字节数- Returns:
- the true/false
-
flush
public void flush()Description copied from interface:BufferSinkWrites all buffered data to the underlying sink, if one exists. Then that sink is recursively flushed which pushes data as far as possible towards its ultimate destination. Typically that destination is a network socket or file.BufferedSink b0 = new Buffer(); BufferedSink b1 = Okio.buffer(b0); BufferedSink b2 = Okio.buffer(b1); b2.writeUtf8("hello"); assertEquals(5, b2.buffer().size()); assertEquals(0, b1.buffer().size()); assertEquals(0, b0.buffer().size()); b2.flush(); assertEquals(0, b2.buffer().size()); assertEquals(0, b1.buffer().size()); assertEquals(5, b0.buffer().size()); -
isOpen
public boolean isOpen() -
close
public void close()Description copied from interface:Source关闭此源并释放此源持有的资源. 读取闭源是一个错误。多次关闭源是安全的. -
timeout
Description copied from interface:Source返回此源的超时时间. -
md5
- Returns:
- the 128-bit MD5 hash of this buffer.
-
sha1
- Returns:
- the 160-bit SHA-1 hash of this buffer.
-
sha256
- Returns:
- the 256-bit SHA-256 hash of this buffer.
-
sha512
- Returns:
- the 512-bit SHA-512 hash of this buffer.
-
hmacSha1
- Parameters:
key- ByteString- Returns:
- the 160-bit SHA-1 HMAC of this buffer.
-
hmacSha256
- Parameters:
key- ByteString- Returns:
- the 256-bit SHA-256 HMAC of this buffer.
-
hmacSha512
- Parameters:
key- ByteString- Returns:
- the 512-bit SHA-512 HMAC of this buffer.
-
equals
-
hashCode
public int hashCode() -
toString
Returns a human-readable string that describes the contents of this buffer. Typically this is a string like[text=Hello]or[hex=0000ffff]. -
clone
Returns a deep copy of this buffer. -
snapshot
Returns an immutable copy of this buffer as a byte string. -
snapshot
Returns an immutable copy of the firstbyteCountbytes of this buffer as a byte string. -
readUnsafe
-
readUnsafe
-
readAndWriteUnsafe
-
readAndWriteUnsafe
-