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:
@@ -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());
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
Reference in New Issue
Block a user