From 58717fdc448c55dbf7efadcd20f1212a74dfd237 Mon Sep 17 00:00:00 2001 From: Dimitris+Jake Date: Fri, 18 Apr 2014 17:41:13 -0700 Subject: [PATCH] Remove all implicit StringBuilder allocations in disk cache. --- .../squareup/okhttp/HttpResponseCache.java | 34 ++++++++++++----- .../okhttp/internal/DiskLruCache.java | 38 +++++++++++-------- 2 files changed, 46 insertions(+), 26 deletions(-) diff --git a/okhttp/src/main/java/com/squareup/okhttp/HttpResponseCache.java b/okhttp/src/main/java/com/squareup/okhttp/HttpResponseCache.java index feb0fb569..c28abd5fb 100644 --- a/okhttp/src/main/java/com/squareup/okhttp/HttpResponseCache.java +++ b/okhttp/src/main/java/com/squareup/okhttp/HttpResponseCache.java @@ -490,22 +490,34 @@ public final class HttpResponseCache extends ResponseCache implements OkResponse OutputStream out = editor.newOutputStream(ENTRY_METADATA); Writer writer = new BufferedWriter(new OutputStreamWriter(out, UTF_8)); - writer.write(url + '\n'); - writer.write(requestMethod + '\n'); - writer.write(Integer.toString(varyHeaders.size()) + '\n'); + writer.write(url); + writer.write('\n'); + writer.write(requestMethod); + writer.write('\n'); + writer.write(Integer.toString(varyHeaders.size())); + writer.write('\n'); for (int i = 0; i < varyHeaders.size(); i++) { - writer.write(varyHeaders.name(i) + ": " + varyHeaders.value(i) + '\n'); + writer.write(varyHeaders.name(i)); + writer.write(": "); + writer.write(varyHeaders.value(i)); + writer.write('\n'); } - writer.write(statusLine + '\n'); - writer.write(Integer.toString(responseHeaders.size()) + '\n'); + writer.write(statusLine); + writer.write('\n'); + writer.write(Integer.toString(responseHeaders.size())); + writer.write('\n'); for (int i = 0; i < responseHeaders.size(); i++) { - writer.write(responseHeaders.name(i) + ": " + responseHeaders.value(i) + '\n'); + writer.write(responseHeaders.name(i)); + writer.write(": "); + writer.write(responseHeaders.value(i)); + writer.write('\n'); } if (isHttps()) { writer.write('\n'); - writer.write(handshake.cipherSuite() + '\n'); + writer.write(handshake.cipherSuite()); + writer.write('\n'); writeCertArray(writer, handshake.peerCertificates()); writeCertArray(writer, handshake.localCertificates()); } @@ -536,11 +548,13 @@ public final class HttpResponseCache extends ResponseCache implements OkResponse private void writeCertArray(Writer writer, List certificates) throws IOException { try { - writer.write(Integer.toString(certificates.size()) + '\n'); + writer.write(Integer.toString(certificates.size())); + writer.write('\n'); for (int i = 0, size = certificates.size(); i < size; i++) { byte[] bytes = certificates.get(i).getEncoded(); String line = ByteString.of(bytes).base64(); - writer.write(line + '\n'); + writer.write(line); + writer.write('\n'); } } catch (CertificateEncodingException e) { throw new IOException(e.getMessage()); diff --git a/okhttp/src/main/java/com/squareup/okhttp/internal/DiskLruCache.java b/okhttp/src/main/java/com/squareup/okhttp/internal/DiskLruCache.java index d87f15c68..9e543d3a5 100644 --- a/okhttp/src/main/java/com/squareup/okhttp/internal/DiskLruCache.java +++ b/okhttp/src/main/java/com/squareup/okhttp/internal/DiskLruCache.java @@ -345,21 +345,22 @@ public final class DiskLruCache implements Closeable { BufferedSink writer = Okio.buffer(Okio.sink(new FileOutputStream(journalFileTmp))); try { - writer.writeUtf8(MAGIC); - writer.writeUtf8("\n"); - writer.writeUtf8(VERSION_1); - writer.writeUtf8("\n"); - writer.writeUtf8(Integer.toString(appVersion)); - writer.writeUtf8("\n"); - writer.writeUtf8(Integer.toString(valueCount)); - writer.writeUtf8("\n"); - writer.writeUtf8("\n"); + writer.writeUtf8(MAGIC).writeByte('\n'); + writer.writeUtf8(VERSION_1).writeByte('\n'); + writer.writeUtf8(Integer.toString(appVersion)).writeByte('\n'); + writer.writeUtf8(Integer.toString(valueCount)).writeByte('\n'); + writer.writeByte('\n'); for (Entry entry : lruEntries.values()) { if (entry.currentEditor != null) { - writer.writeUtf8(DIRTY + ' ' + entry.key + '\n'); + writer.writeUtf8(DIRTY).writeByte(' '); + writer.writeUtf8(entry.key); + writer.writeByte('\n'); } else { - writer.writeUtf8(CLEAN + ' ' + entry.key + entry.getLengths() + '\n'); + writer.writeUtf8(CLEAN).writeByte(' '); + writer.writeUtf8(entry.key); + writer.writeUtf8(entry.getLengths()); + writer.writeByte('\n'); } } } finally { @@ -429,7 +430,7 @@ public final class DiskLruCache implements Closeable { } redundantOpCount++; - journalWriter.writeUtf8(READ + ' ' + key + '\n'); + journalWriter.writeUtf8(READ).writeByte(' ').writeUtf8(key).writeByte('\n'); if (journalRebuildRequired()) { executorService.execute(cleanupRunnable); } @@ -464,7 +465,7 @@ public final class DiskLruCache implements Closeable { entry.currentEditor = editor; // Flush the journal before creating files to prevent file leaks. - journalWriter.writeUtf8(DIRTY + ' ' + key + '\n'); + journalWriter.writeUtf8(DIRTY).writeByte(' ').writeUtf8(key).writeByte('\n'); journalWriter.flush(); return editor; } @@ -540,13 +541,18 @@ public final class DiskLruCache implements Closeable { entry.currentEditor = null; if (entry.readable | success) { entry.readable = true; - journalWriter.writeUtf8(CLEAN + ' ' + entry.key + entry.getLengths() + '\n'); + journalWriter.writeUtf8(CLEAN).writeByte(' '); + journalWriter.writeUtf8(entry.key); + journalWriter.writeUtf8(entry.getLengths()); + journalWriter.writeByte('\n'); if (success) { entry.sequenceNumber = nextSequenceNumber++; } } else { lruEntries.remove(entry.key); - journalWriter.writeUtf8(REMOVE + ' ' + entry.key + '\n'); + journalWriter.writeUtf8(REMOVE).writeByte(' '); + journalWriter.writeUtf8(entry.key); + journalWriter.writeByte('\n'); } journalWriter.flush(); @@ -587,7 +593,7 @@ public final class DiskLruCache implements Closeable { } redundantOpCount++; - journalWriter.writeUtf8(REMOVE + ' ' + key + '\n'); + journalWriter.writeUtf8(REMOVE).writeByte(' ').writeUtf8(key).writeByte('\n'); lruEntries.remove(key); if (journalRebuildRequired()) {