Class 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.booleanbooleanReturns true if there are no more bytes in this source.voidflush()Writes all buffered data to the underlying sink, if one exists.This source's internal buffer.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) Returns the index ofbif it is found in the range offromIndexinclusive totoIndexexclusive.longindexOf(ByteString bytes) Equivalent toindexOf(bytes, 0).longindexOf(ByteString bytes, long fromIndex) Returns the index of the first match forbytesin the buffer at or afterfromIndex.longindexOfElement(ByteString targetBytes) Equivalent toindexOfElement(targetBytes, 0).longindexOfElement(ByteString targetBytes, long fromIndex) Returns the first index in this buffer that is at or afterfromIndexand that contains any of the bytes intargetBytes.Returns an input stream that reads from this source.booleanisOpen()md5()Returns an output stream that writes to this sink.peek()Returns a newBufferedSourcethat can read data from thisBufferedSourcewithout consuming it.booleanrangeEquals(long offset, ByteString bytes) Returns true if the bytes atoffsetin this source equalbytes.booleanrangeEquals(long offset, ByteString bytes, int bytesOffset, int byteCount) Returns true ifbyteCountbytes atoffsetin this source equalbytesatbytesOffset.intread(byte[] sink) Removes up tosink.lengthbytes from this and copies them intosink.intread(byte[] sink, int offset, int byteCount) Removes up tobyteCountbytes from this and copies them intosinkatoffset.intread(ByteBuffer sink) long从中删除至少1个字节,最多为byteCount字节, 并将它们 附加到sink。longRemoves all bytes from this and appends them tosink.readAndWriteUnsafe(Buffer.UnsafeCursor unsafeCursor) bytereadByte()Removes a byte from this source and returns it.byte[]Removes all bytes from this and returns them as a byte array.byte[]readByteArray(long byteCount) RemovesbyteCountbytes from this and returns them as a byte array.Removes all bytes bytes from this and returns them as a byte string.readByteString(long byteCount) RemovesbyteCountbytes from this and returns them as a byte string.longReads a long from this source in signed decimal form (i.e., as a string in base 10 with optional leading '-').final BufferreadFrom(InputStream in) 将in中的字节读入并转为bytesfinal BufferreadFrom(InputStream in, long byteCount) ReadbyteCountbytes frominto this.voidreadFully(byte[] sink) Removes exactlysink.lengthbytes from this and copies them intosink.voidRemoves exactlybyteCountbytes from this and appends them tosink.longReads a long form this source in hexadecimal form (i.e., as a string in base 16).intreadInt()Removes four bytes from this source and returns a big-endian int.intRemoves four bytes from this source and returns a little-endian int.longreadLong()Removes eight bytes from this source and returns a big-endian long.longRemoves eight bytes from this source and returns a little-endian long.shortRemoves two bytes from this source and returns a big-endian short.shortRemoves two bytes from this source and returns a little-endian short.readString(long byteCount, Charset charset) RemovesbyteCountbytes from this, decodes them ascharset, and returns the string.readString(Charset charset) Removes all bytes from this, decodes them ascharset, and returns the string.readUnsafe(Buffer.UnsafeCursor unsafeCursor) readUtf8()Removes all bytes from this, decodes them as UTF-8, and returns the string.readUtf8(long byteCount) RemovesbyteCountbytes from this, decodes them as UTF-8, and returns the string.intRemoves and returns a single UTF-8 code point, reading between 1 and 4 bytes as necessary.Removes and returns characters up to but not including the next line break.readUtf8Line(long newline) Removes and returns characters up to but not including the next line break.readUtf8LineStrict(long limit) LikeBufferSource.readUtf8LineStrict(), except this allows the caller to specify the longest allowed match.booleanrequest(long byteCount) Returns true when the buffer contains at leastbyteCountbytes, expanding it as necessary.voidrequire(long byteCount) Returns when the buffer contains at leastbyteCountbytes.intFinds the first string inoptionsthat is a prefix of this buffer, consumes it from this buffer, and returns its index.intselectPrefix(Blending blending, boolean selectTruncated) 返回此缓冲区前缀的选项中的值的索引。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:BufferSourceThis source's internal buffer.- Specified by:
getBufferin interfaceBufferSource
-
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:BufferSourceReturns true if there are no more bytes in this source. This will block until there are bytes to read or the source is definitely exhausted.- Specified by:
exhaustedin interfaceBufferSource
-
require
Description copied from interface:BufferSourceReturns when the buffer contains at leastbyteCountbytes. Throws anEOFExceptionif the source is exhausted before the required bytes can be read.- Specified by:
requirein interfaceBufferSource- Throws:
EOFException
-
request
public boolean request(long byteCount) Description copied from interface:BufferSourceReturns true when the buffer contains at leastbyteCountbytes, expanding it as necessary. Returns false if the source is exhausted before the requested bytes can be read.- Specified by:
requestin interfaceBufferSource
-
peek
Description copied from interface:BufferSourceReturns a newBufferedSourcethat can read data from thisBufferedSourcewithout consuming it. The returned source becomes invalid once this source is next read or closed.For example, we can use
peek()to lookahead and read the same data multiple times.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
-
inputStream
Description copied from interface:BufferSourceReturns an input stream that reads from this source.- Specified by:
inputStreamin interfaceBufferSource
-
copyTo
将其内容复制到out.- Parameters:
out- 输出流- Returns:
- Buffer 内容
- Throws:
IOException- 抛出异常
-
copyTo
从这里复制byteCount字节,从offset开始,复制到out.- Parameters:
out- 输出流offset- 偏移量byteCount- 偏移量- Returns:
- Buffer 内容
- Throws:
IOException- 抛出异常
-
copyTo
-
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:BufferSourceRemoves a byte from this source and returns it.- Specified by:
readBytein interfaceBufferSource
-
getByte
public final byte getByte(long pos) 返回pos处的字节.- Parameters:
pos- long- Returns:
- byte 内容
-
readShort
public short readShort()Description copied from interface:BufferSourceRemoves two bytes from this source and returns a big-endian short.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
-
readInt
public int readInt()Description copied from interface:BufferSourceRemoves four bytes from this source and returns a big-endian int.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:BufferSourceRemoves eight bytes from this source and returns a big-endian long.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:BufferSourceRemoves two bytes from this source and returns a little-endian short.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
-
readIntLe
public int readIntLe()Description copied from interface:BufferSourceRemoves four bytes from this source and returns a little-endian int.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:BufferSourceRemoves eight bytes from this source and returns a little-endian long.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:BufferSourceReads a long from this source in signed decimal form (i.e., as a string in base 10 with optional leading '-'). This will iterate until a non-digit character is found.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:BufferSourceReads a long form this source in hexadecimal form (i.e., as a string in base 16). This will iterate until a non-hexadecimal character is found.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:BufferSourceRemoves all bytes bytes from this and returns them as a byte string.- Specified by:
readByteStringin interfaceBufferSource- Returns:
- the
ByteString
-
readByteString
Description copied from interface:BufferSourceRemovesbyteCountbytes from this and returns them as a byte string.- Specified by:
readByteStringin interfaceBufferSource- Returns:
- the
ByteString - Throws:
EOFException
-
select
Description copied from interface:BufferSourceFinds the first string inoptionsthat is a prefix of this buffer, consumes it from this buffer, and returns its index. If no byte string inoptionsis a prefix of this buffer this returns -1 and no bytes are consumed.This can be used as an alternative to
BufferSource.readByteString()or evenBufferSource.readUtf8()if the set of expected values is known in advance.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- 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:BufferSourceRemoves exactlybyteCountbytes from this and appends them tosink. Throws anEOFExceptionif the requested number of bytes cannot be read.- Specified by:
readFullyin interfaceBufferSource- Throws:
EOFException
-
readAll
Description copied from interface:BufferSourceRemoves all bytes from this and appends them tosink. Returns the total number of bytes written tosinkwhich will be 0 if this is exhausted.- Specified by:
readAllin interfaceBufferSource- Throws:
IOException
-
readUtf8
Description copied from interface:BufferSourceRemoves all bytes from this, decodes them as UTF-8, and returns the string. Returns the empty string if this source is empty.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
-
readUtf8
Description copied from interface:BufferSourceRemovesbyteCountbytes from this, decodes them as UTF-8, and returns the string.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- Throws:
EOFException
-
readString
Description copied from interface:BufferSourceRemoves all bytes from this, decodes them ascharset, and returns the string.- Specified by:
readStringin interfaceBufferSource
-
readString
Description copied from interface:BufferSourceRemovesbyteCountbytes from this, decodes them ascharset, and returns the string.- Specified by:
readStringin interfaceBufferSource- Throws:
EOFException
-
readUtf8Line
Description copied from interface:BufferSourceRemoves and returns characters up to but not including the next line break. A line break is either"\n"or"\r\n"; these characters are not included in the result.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());On the end of the stream this method returns null, just like
BufferedReader. If the source doesn't end with a line break then an implicit line break is assumed. Null is returned once the source is exhausted. Use this for human-generated data, where a trailing line break is optional.- Specified by:
readUtf8Linein interfaceBufferSource- Throws:
EOFException
-
readUtf8LineStrict
Description copied from interface:BufferSourceRemoves and returns characters up to but not including the next line break. A line break is either"\n"or"\r\n"; these characters are not included in the result.On the end of the stream this method throws. Every call must consume either '\r\n' or '\n'. If these characters are absent in the stream, an
EOFExceptionis thrown. Use this for machine-generated data where a missing line break implies truncated input.- Specified by:
readUtf8LineStrictin interfaceBufferSource- Throws:
EOFException
-
readUtf8LineStrict
Description copied from interface:BufferSourceLikeBufferSource.readUtf8LineStrict(), except this allows the caller to specify the longest allowed match. Use this to protect against streams that may not include"\n"or"\r\n".The returned string will have at most
limitUTF-8 bytes, and the maximum number of bytes scanned islimit + 2. Iflimit == 0this will always throw anEOFExceptionbecause no bytes will be scanned.This method is safe. No bytes are discarded if the match fails, and the caller is free to try another match:
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- Throws:
EOFException
-
readUtf8Line
- Throws:
EOFException
-
readUtf8CodePoint
Description copied from interface:BufferSourceRemoves and returns a single UTF-8 code point, reading between 1 and 4 bytes as necessary.If this source is exhausted before a complete code point can be read, this throws an
EOFExceptionand consumes no input.If this source doesn't start with a properly-encoded UTF-8 code point, this method will remove 1 or more non-UTF-8 bytes and return the replacement character (
U+FFFD). This covers encoding problems (the input is not properly-encoded UTF-8), characters out of range (beyond the 0x10ffff limit of Unicode), code points for UTF-16 surrogates (U+d800..U+dfff) and overlong encodings (such as0xc080for the NUL character in modified UTF-8).- Specified by:
readUtf8CodePointin interfaceBufferSource- Throws:
EOFException
-
readByteArray
public byte[] readByteArray()Description copied from interface:BufferSourceRemoves all bytes from this and returns them as a byte array.- Specified by:
readByteArrayin interfaceBufferSource- Returns:
- the byte
-
readByteArray
Description copied from interface:BufferSourceRemovesbyteCountbytes from this and returns them as a byte array.- Specified by:
readByteArrayin interfaceBufferSource- Returns:
- the byte
- Throws:
EOFException
-
read
public int read(byte[] sink) Description copied from interface:BufferSourceRemoves up tosink.lengthbytes from this and copies them intosink. Returns the number of bytes read, or -1 if this source is exhausted.- Specified by:
readin interfaceBufferSource
-
readFully
Description copied from interface:BufferSourceRemoves exactlysink.lengthbytes from this and copies them intosink. Throws anEOFExceptionif the requested number of bytes cannot be read.- Specified by:
readFullyin interfaceBufferSource- Throws:
EOFException
-
read
public int read(byte[] sink, int offset, int byteCount) Description copied from interface:BufferSourceRemoves up tobyteCountbytes from this and copies them intosinkatoffset. Returns the number of bytes read, or -1 if this source is exhausted.- Specified by:
readin interfaceBufferSource
-
read
- Specified by:
readin interfaceReadableByteChannel- Throws:
IOException
-
clear
public final void clear()丢弃此缓冲区中的所有字节。在使用完缓冲区后调用此方法将把它的段返回到池中 -
skip
从这个缓冲区的头部丢弃byteCount字节.- Specified by:
skipin interfaceBufferSource- 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 Segment Returns a tail segment that we can write at least
minimumCapacitybytes to, creating it if necessary.
-
write
-
read
-
indexOf
public long indexOf(byte b) Description copied from interface:BufferSourceEquivalent toindexOf(b, 0).- Specified by:
indexOfin interfaceBufferSource
-
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
-
indexOf
public long indexOf(byte b, long fromIndex, long toIndex) Description copied from interface:BufferSourceReturns the index ofbif it is found in the range offromIndexinclusive totoIndexexclusive. Ifbisn't found, or iffromIndex == toIndex, then -1 is returned.The scan terminates at either
toIndexor the end of the buffer, whichever comes first. The maximum number of bytes scanned istoIndex-fromIndex.- Specified by:
indexOfin interfaceBufferSource
-
indexOf
Description copied from interface:BufferSourceEquivalent toindexOf(bytes, 0).- Specified by:
indexOfin interfaceBufferSource- Throws:
IOException
-
indexOf
Description copied from interface:BufferSourceReturns the index of the first match forbytesin the buffer at or afterfromIndex. This expands the buffer as necessary untilbytesis found. This reads an unbounded number of bytes into the buffer. Returns -1 if the stream is exhausted before the requested bytes are found.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- Throws:
IOException
-
indexOfElement
Description copied from interface:BufferSourceEquivalent toindexOfElement(targetBytes, 0).- Specified by:
indexOfElementin interfaceBufferSource
-
indexOfElement
Description copied from interface:BufferSourceReturns the first index in this buffer that is at or afterfromIndexand that contains any of the bytes intargetBytes. This expands the buffer as necessary until a target byte is found. This reads an unbounded number of bytes into the buffer. Returns -1 if the stream is exhausted before the requested byte is found.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
-
rangeEquals
Description copied from interface:BufferSourceReturns true if the bytes atoffsetin this source equalbytes. This expands the buffer as necessary until a byte does not match, all bytes are matched, or if the stream is exhausted before enough bytes could determine a match.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
-
rangeEquals
Description copied from interface:BufferSourceReturns true ifbyteCountbytes atoffsetin this source equalbytesatbytesOffset. This expands the buffer as necessary until a byte does not match, all bytes are matched, or if the stream is exhausted before enough bytes could determine a match.- Specified by:
rangeEqualsin interfaceBufferSource
-
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
-
close
-
timeout
-
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
-
toString
-
clone
-
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
-