Package okio
Interface BufferedSink
-
- All Superinterfaces:
AutoCloseable
,Channel
,Closeable
,Flushable
,Sink
,WritableByteChannel
- All Known Implementing Classes:
Buffer
public interface BufferedSink extends Sink, WritableByteChannel
A sink that keeps a buffer internally so that callers can do small writes without a performance penalty.
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description Buffer
buffer()
Returns this sink's internal buffer.BufferedSink
emit()
Writes all buffered data to the underlying sink, if one exists.BufferedSink
emitCompleteSegments()
Writes complete segments to the underlying sink, if one exists.void
flush()
Writes all buffered data to the underlying sink, if one exists.OutputStream
outputStream()
Returns an output stream that writes to this sink.BufferedSink
write(byte[] source)
LikeOutputStream.write(byte[])
, this writes a complete byte array to this sink.BufferedSink
write(byte[] source, int offset, int byteCount)
LikeOutputStream.write(byte[], int, int)
, this writesbyteCount
bytes ofsource
, starting atoffset
.BufferedSink
write(ByteString byteString)
BufferedSink
write(Source source, long byteCount)
RemovesbyteCount
bytes fromsource
and appends them to this sink.long
writeAll(Source source)
Removes all bytes fromsource
and appends them to this sink.BufferedSink
writeByte(int b)
Writes a byte to this sink.BufferedSink
writeDecimalLong(long v)
Writes a long to this sink in signed decimal form (i.e., as a string in base 10).BufferedSink
writeHexadecimalUnsignedLong(long v)
Writes a long to this sink in hexadecimal form (i.e., as a string in base 16).BufferedSink
writeInt(int i)
Writes a big-endian int to this sink using four bytes.BufferedSink
writeIntLe(int i)
Writes a little-endian int to this sink using four bytes.BufferedSink
writeLong(long v)
Writes a big-endian long to this sink using eight bytes.BufferedSink
writeLongLe(long v)
Writes a little-endian long to this sink using eight bytes.BufferedSink
writeShort(int s)
Writes a big-endian short to this sink using two bytes.BufferedSink
writeShortLe(int s)
Writes a little-endian short to this sink using two bytes.BufferedSink
writeString(String string, int beginIndex, int endIndex, Charset charset)
Encodes the characters atbeginIndex
up toendIndex
fromstring
incharset
and writes it to this sink.BufferedSink
writeString(String string, Charset charset)
Encodesstring
incharset
and writes it to this sink.BufferedSink
writeUtf8(String string)
Encodesstring
in UTF-8 and writes it to this sink.BufferedSink
writeUtf8(String string, int beginIndex, int endIndex)
Encodes the characters atbeginIndex
up toendIndex
fromstring
in UTF-8 and writes it to this sink.BufferedSink
writeUtf8CodePoint(int codePoint)
EncodescodePoint
in UTF-8 and writes it to this sink.-
Methods inherited from interface java.nio.channels.WritableByteChannel
write
-
-
-
-
Method Detail
-
buffer
Buffer buffer()
Returns this sink's internal buffer.
-
write
BufferedSink write(ByteString byteString) throws IOException
- Throws:
IOException
-
write
BufferedSink write(byte[] source) throws IOException
LikeOutputStream.write(byte[])
, this writes a complete byte array to this sink.- Throws:
IOException
-
write
BufferedSink write(byte[] source, int offset, int byteCount) throws IOException
LikeOutputStream.write(byte[], int, int)
, this writesbyteCount
bytes ofsource
, starting atoffset
.- Throws:
IOException
-
writeAll
long writeAll(Source source) throws IOException
Removes all bytes fromsource
and appends them to this sink. Returns the number of bytes read which will be 0 ifsource
is exhausted.- Throws:
IOException
-
write
BufferedSink write(Source source, long byteCount) throws IOException
RemovesbyteCount
bytes fromsource
and appends them to this sink.- Throws:
IOException
-
writeUtf8
BufferedSink writeUtf8(String string) throws IOException
Encodesstring
in 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());
- Throws:
IOException
-
writeUtf8
BufferedSink writeUtf8(String string, int beginIndex, int endIndex) throws IOException
Encodes the characters atbeginIndex
up toendIndex
fromstring
in 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());
- Throws:
IOException
-
writeUtf8CodePoint
BufferedSink writeUtf8CodePoint(int codePoint) throws IOException
EncodescodePoint
in UTF-8 and writes it to this sink.- Throws:
IOException
-
writeString
BufferedSink writeString(String string, Charset charset) throws IOException
Encodesstring
incharset
and writes it to this sink.- Throws:
IOException
-
writeString
BufferedSink writeString(String string, int beginIndex, int endIndex, Charset charset) throws IOException
Encodes the characters atbeginIndex
up toendIndex
fromstring
incharset
and writes it to this sink.- Throws:
IOException
-
writeByte
BufferedSink writeByte(int b) throws IOException
Writes a byte to this sink.- Throws:
IOException
-
writeShort
BufferedSink writeShort(int s) throws IOException
Writes 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());
- Throws:
IOException
-
writeShortLe
BufferedSink writeShortLe(int s) throws IOException
Writes 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());
- Throws:
IOException
-
writeInt
BufferedSink writeInt(int i) throws IOException
Writes 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());
- Throws:
IOException
-
writeIntLe
BufferedSink writeIntLe(int i) throws IOException
Writes 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());
- Throws:
IOException
-
writeLong
BufferedSink writeLong(long v) throws IOException
Writes 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());
- Throws:
IOException
-
writeLongLe
BufferedSink writeLongLe(long v) throws IOException
Writes 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());
- Throws:
IOException
-
writeDecimalLong
BufferedSink writeDecimalLong(long v) throws IOException
Writes 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());
- Throws:
IOException
-
writeHexadecimalUnsignedLong
BufferedSink writeHexadecimalUnsignedLong(long v) throws IOException
Writes 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());
- Throws:
IOException
-
flush
void flush() throws IOException
Writes 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());
- Specified by:
flush
in interfaceFlushable
- Specified by:
flush
in interfaceSink
- Throws:
IOException
-
emit
BufferedSink emit() throws IOException
Writes all buffered data to the underlying sink, if one exists. Likeflush()
, 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());
- Throws:
IOException
-
emitCompleteSegments
BufferedSink emitCompleteSegments() throws IOException
Writes complete segments to the underlying sink, if one exists. Likeflush()
, 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.
- Throws:
IOException
-
outputStream
OutputStream outputStream()
Returns an output stream that writes to this sink.
-
-