1
0
mirror of https://github.com/square/okhttp.git synced 2026-01-18 20:40:58 +03:00

Remove all implicit StringBuilder allocations in disk cache.

This commit is contained in:
Dimitris+Jake
2014-04-18 17:41:13 -07:00
committed by dimitris
parent 17840eda56
commit 58717fdc44
2 changed files with 46 additions and 26 deletions

View File

@@ -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<Certificate> 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());

View File

@@ -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()) {