package cm.android.common.cache.disk.entry;
import java.io.IOException;
import java.io.Writer;
import java.util.Map;
import cm.android.util.AndroidUtils;
import cm.java.util.StrictLineReader;
import cm.java.util.Utils;
public class HttpCacheEntry extends DiskCacheEntry {
private String uri;
private String time;
private Map<String, String> headers;
private String content;
public HttpCacheEntry() {
super(0);
}
private Map<String, String> readHeader(StrictLineReader reader)
throws IOException {
// 读head条数
int length = Integer.parseInt(reader.readLine());
if (length == -1 || length == 0) {
return null;
}
Map<String, String> headMap = AndroidUtils.newMap();
for (int i = 0; i < length; i++) {
String line = reader.readLine();
String[] head = line.split(":");
headMap.put(head[0], head[1]);
}
return headMap;
}
@Override
protected void read(StrictLineReader reader) throws IOException {
uri = reader.readLine();
time = reader.readLine();
content = reader.readLine();
headers = readHeader(reader);
}
@Override
protected void write(Writer writer) throws IOException {
// 写uri
writer.write(uri + '\n');
// 写入时间
writer.write(String.valueOf(System.currentTimeMillis()) + '\n');
// 写body
writer.write(Utils.replaceBlank(content) + '\n');
// 写head条数
if (!Utils.isEmpty(headers)) {
writer.write(String.valueOf(headers.size()) + '\n');
// 写header
for (Map.Entry<String, String> entry : headers.entrySet()) {
writer.write(entry.getKey() + ":" + entry.getValue() + '\n');
}
} else {
writer.write("0" + '\n');
}
}
public String getUri() {
return uri;
}
public void setUri(String uri) {
this.uri = uri;
}
public Map<String, String> getHeaders() {
return headers;
}
// public void setTime(String time) {
// this.time = time;
// }
public void setHeaders(Map<String, String> headers) {
this.headers = headers;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getTime() {
return time;
}
}