journalWriter.close(); try (BufferedSink writer = Okio.buffer(fileSystem.sink(journalFileTmp))) { writer.writeUtf8(MAGIC).writeByte('\n'); writer.writeUtf8(VERSION_1).writeByte('\n'); writer.writeDecimalLong(appVersion).writeByte('\n'); writer.writeDecimalLong(valueCount).writeByte('\n'); writer.writeByte('\n'); writer.writeUtf8(DIRTY).writeByte(' '); writer.writeUtf8(entry.key); writer.writeByte('\n'); } else { writer.writeUtf8(CLEAN).writeByte(' '); writer.writeUtf8(entry.key); entry.writeLengths(writer); writer.writeByte('\n');
@Override public synchronized void flush() throws IOException { if (closed) return; // Don't throw; this stream might have been closed on the caller's behalf. sink.flush(); }
/** Append space-prefixed lengths to {@code writer}. */ void writeLengths(BufferedSink writer) throws IOException { for (long length : lengths) { writer.writeByte(' ').writeDecimalLong(length); } }
@Override public void write(Buffer source, long byteCount) throws IOException { if (closed) throw new IllegalStateException("closed"); if (byteCount == 0) return; sink.writeHexadecimalUnsignedLong(byteCount); sink.writeUtf8("\r\n"); sink.write(source, byteCount); sink.writeUtf8("\r\n"); }
private File download(String url) throws IOException { File output=new File(getFilesDir(), UPDATE_FILENAME); if (output.exists()) { output.delete(); } OkHttpClient client=new OkHttpClient(); Request request=new Request.Builder().url(url).build(); Response response=client.newCall(request).execute(); BufferedSink sink=Okio.buffer(Okio.sink(output)); sink.writeAll(response.body().source()); sink.close(); return(output); } }
@Test public void readableChannelNioFile() throws Exception { File file = temporaryFolder.newFile(); BufferedSink initialData = Okio.buffer(Okio.sink(file)); initialData.writeUtf8("abcdefghijklmnopqrstuvwxyz"); initialData.close(); FileChannel fileChannel = FileChannel.open(file.toPath(), StandardOpenOption.READ); testReadableByteChannel(fileChannel); }
@Test public void writeAll() throws IOException { MockSink mockSink = new MockSink(); BufferedSink bufferedSink = Okio.buffer(mockSink); bufferedSink.getBuffer().writeUtf8("abc"); assertEquals(3, bufferedSink.writeAll(new Buffer().writeUtf8("def"))); assertEquals(6, bufferedSink.getBuffer().size()); assertEquals("abcdef", bufferedSink.getBuffer().readUtf8(6)); mockSink.assertLog(); // No writes. }
@Test public void writeSourceReadsFully() throws Exception { Source source = new ForwardingSource(new Buffer()) { @Override public long read(Buffer sink, long byteCount) throws IOException { sink.writeUtf8("abcd"); return 4; } }; sink.write(source, 8); sink.flush(); assertEquals("abcdabcd", data.readUtf8()); }
@Test public void writeAllWritesOneSegmentAtATime() throws IOException { Buffer write1 = new Buffer().writeUtf8(TestUtil.repeat('a', SEGMENT_SIZE)); Buffer write2 = new Buffer().writeUtf8(TestUtil.repeat('b', SEGMENT_SIZE)); Buffer write3 = new Buffer().writeUtf8(TestUtil.repeat('c', SEGMENT_SIZE)); Buffer source = new Buffer().writeUtf8("" + TestUtil.repeat('a', SEGMENT_SIZE) + TestUtil.repeat('b', SEGMENT_SIZE) + TestUtil.repeat('c', SEGMENT_SIZE)); MockSink mockSink = new MockSink(); BufferedSink bufferedSink = Okio.buffer(mockSink); assertEquals(SEGMENT_SIZE * 3, bufferedSink.writeAll(source)); mockSink.assertLog( "write(" + write1 + ", " + write1.size() + ")", "write(" + write2 + ", " + write2.size() + ")", "write(" + write3 + ", " + write3.size() + ")"); } }
@Test public void bufferedSinkFlush() throws IOException { Buffer sink = new Buffer(); BufferedSink bufferedSink = Okio.buffer((Sink) sink); bufferedSink.writeByte('a'); assertEquals(0, sink.size()); bufferedSink.flush(); assertEquals(0, bufferedSink.getBuffer().size()); assertEquals(1, sink.size()); }
@Test public void bufferedSinkEmitsTailWhenItIsComplete() throws IOException { Buffer sink = new Buffer(); BufferedSink bufferedSink = Okio.buffer((Sink) sink); bufferedSink.writeUtf8(repeat('a', SEGMENT_SIZE - 1)); assertEquals(0, sink.size()); bufferedSink.writeByte(0); assertEquals(SEGMENT_SIZE, sink.size()); assertEquals(0, bufferedSink.getBuffer().size()); }
@Test public void readFullyByteArray() throws IOException { Buffer data = new Buffer(); data.writeUtf8("Hello").writeUtf8(repeat('e', SEGMENT_SIZE)); byte[] expected = data.clone().readByteArray(); sink.write(data, data.size()); sink.emit(); byte[] sink = new byte[SEGMENT_SIZE + 5]; source.readFully(sink); assertByteArraysEquals(expected, sink); }
@Test public void closeWithExceptionWhenWriting() throws IOException { MockSink mockSink = new MockSink(); mockSink.scheduleThrow(0, new IOException()); BufferedSink bufferedSink = Okio.buffer(mockSink); bufferedSink.writeByte('a'); try { bufferedSink.close(); fail(); } catch (IOException expected) { } mockSink.assertLog("write([text=a], 1)", "close()"); }
System.out.println(" md5: " + buffer.md5().hex()); System.out.println(" sha1: " + buffer.sha1().hex()); System.out.println(" sha256: " + buffer.sha256().hex()); System.out.println(" sha512: " + buffer.sha512().hex()); System.out.println(); try (HashingSource hashingSource = HashingSource.sha256(Okio.source(file)); BufferedSource source = Okio.buffer(hashingSource)) { source.readAll(Okio.blackhole()); System.out.println(" sha256: " + hashingSource.hash().hex()); BufferedSink sink = Okio.buffer(hashingSink); Source source = Okio.source(file)) { sink.writeAll(source); sink.close(); // Emit anything buffered. System.out.println(" sha256: " + hashingSink.hash().hex());