Package okio

Interface BufferedSink

  • All Superinterfaces:
    java.lang.AutoCloseable, java.nio.channels.Channel, java.io.Closeable, java.io.Flushable, Sink, java.nio.channels.WritableByteChannel
    All Known Implementing Classes:
    Buffer

    public interface BufferedSink
    extends Sink, java.nio.channels.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.
      java.io.OutputStream outputStream()
      Returns an output stream that writes to this sink.
      BufferedSink write​(byte[] source)
      Like OutputStream.write(byte[]), this writes a complete byte array to this sink.
      BufferedSink write​(byte[] source, int offset, int byteCount)
      Like OutputStream.write(byte[], int, int), this writes byteCount bytes of source, starting at offset.
      BufferedSink write​(ByteString byteString)  
      BufferedSink write​(Source source, long byteCount)
      Removes byteCount bytes from source and appends them to this sink.
      long writeAll​(Source source)
      Removes all bytes from source 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​(java.lang.String string, int beginIndex, int endIndex, java.nio.charset.Charset charset)
      Encodes the characters at beginIndex up to endIndex from string in charset and writes it to this sink.
      BufferedSink writeString​(java.lang.String string, java.nio.charset.Charset charset)
      Encodes string in charset and writes it to this sink.
      BufferedSink writeUtf8​(java.lang.String string)
      Encodes string in UTF-8 and writes it to this sink.
      BufferedSink writeUtf8​(java.lang.String string, int beginIndex, int endIndex)
      Encodes the characters at beginIndex up to endIndex from string in UTF-8 and writes it to this sink.
      BufferedSink writeUtf8CodePoint​(int codePoint)
      Encodes codePoint in UTF-8 and writes it to this sink.
      • Methods inherited from interface java.nio.channels.Channel

        close, isOpen
      • Methods inherited from interface java.nio.channels.WritableByteChannel

        write
    • Method Detail

      • buffer

        Buffer buffer()
        Returns this sink's internal buffer.
      • write

        BufferedSink write​(byte[] source)
                    throws java.io.IOException
        Like OutputStream.write(byte[]), this writes a complete byte array to this sink.
        Throws:
        java.io.IOException
      • write

        BufferedSink write​(byte[] source,
                           int offset,
                           int byteCount)
                    throws java.io.IOException
        Like OutputStream.write(byte[], int, int), this writes byteCount bytes of source, starting at offset.
        Throws:
        java.io.IOException
      • writeAll

        long writeAll​(Source source)
               throws java.io.IOException
        Removes all bytes from source and appends them to this sink. Returns the number of bytes read which will be 0 if source is exhausted.
        Throws:
        java.io.IOException
      • write

        BufferedSink write​(Source source,
                           long byteCount)
                    throws java.io.IOException
        Removes byteCount bytes from source and appends them to this sink.
        Throws:
        java.io.IOException
      • writeUtf8

        BufferedSink writeUtf8​(java.lang.String string)
                        throws java.io.IOException
        Encodes string 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:
        java.io.IOException
      • writeUtf8

        BufferedSink writeUtf8​(java.lang.String string,
                               int beginIndex,
                               int endIndex)
                        throws java.io.IOException
        Encodes the characters at beginIndex up to endIndex from string 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:
        java.io.IOException
      • writeUtf8CodePoint

        BufferedSink writeUtf8CodePoint​(int codePoint)
                                 throws java.io.IOException
        Encodes codePoint in UTF-8 and writes it to this sink.
        Throws:
        java.io.IOException
      • writeString

        BufferedSink writeString​(java.lang.String string,
                                 java.nio.charset.Charset charset)
                          throws java.io.IOException
        Encodes string in charset and writes it to this sink.
        Throws:
        java.io.IOException
      • writeString

        BufferedSink writeString​(java.lang.String string,
                                 int beginIndex,
                                 int endIndex,
                                 java.nio.charset.Charset charset)
                          throws java.io.IOException
        Encodes the characters at beginIndex up to endIndex from string in charset and writes it to this sink.
        Throws:
        java.io.IOException
      • writeByte

        BufferedSink writeByte​(int b)
                        throws java.io.IOException
        Writes a byte to this sink.
        Throws:
        java.io.IOException
      • writeShort

        BufferedSink writeShort​(int s)
                         throws java.io.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:
        java.io.IOException
      • writeShortLe

        BufferedSink writeShortLe​(int s)
                           throws java.io.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:
        java.io.IOException
      • writeInt

        BufferedSink writeInt​(int i)
                       throws java.io.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:
        java.io.IOException
      • writeIntLe

        BufferedSink writeIntLe​(int i)
                         throws java.io.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:
        java.io.IOException
      • writeLong

        BufferedSink writeLong​(long v)
                        throws java.io.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:
        java.io.IOException
      • writeLongLe

        BufferedSink writeLongLe​(long v)
                          throws java.io.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:
        java.io.IOException
      • writeDecimalLong

        BufferedSink writeDecimalLong​(long v)
                               throws java.io.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:
        java.io.IOException
      • writeHexadecimalUnsignedLong

        BufferedSink writeHexadecimalUnsignedLong​(long v)
                                           throws java.io.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:
        java.io.IOException
      • flush

        void flush()
            throws java.io.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 interface java.io.Flushable
        Specified by:
        flush in interface Sink
        Throws:
        java.io.IOException
      • emit

        BufferedSink emit()
                   throws java.io.IOException
        Writes all buffered data to the underlying sink, if one exists. Like 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());
         
        Throws:
        java.io.IOException
      • emitCompleteSegments

        BufferedSink emitCompleteSegments()
                                   throws java.io.IOException
        Writes complete segments to the underlying sink, if one exists. Like 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.
         
        Throws:
        java.io.IOException
      • outputStream

        java.io.OutputStream outputStream()
        Returns an output stream that writes to this sink.