package cm.android.common.cache.disk.entry;
import com.jakewharton.disklrucache.DiskLruCache;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import cm.java.util.Charsets;
import cm.java.util.IoUtil;
import cm.java.util.StrictLineReader;
public abstract class DiskCacheEntry {
private int entry = 0;
public DiskCacheEntry(int entry) {
this.entry = entry;
}
/**
* 从DiskLruCache.Snapshot中读取数据
*/
public final void readFrom(DiskLruCache.Snapshot snapshot)
throws IOException {
InputStream in = snapshot.getInputStream(entry);
StrictLineReader reader = null;
try {
reader = new StrictLineReader(in, Charsets.UTF_8);
read(reader);
} finally {
IoUtil.closeQuietly(reader);
IoUtil.closeQuietly(in);
}
}
/**
* 向DiskLruCache.Editor中写入数据
*/
public final void writeTo(DiskLruCache.Editor editor) throws IOException {
OutputStream out = editor.newOutputStream(entry);
Writer writer = null;
try {
writer = new BufferedWriter(new OutputStreamWriter(out,
Charsets.UTF_8));
write(writer);
} finally {
IoUtil.closeQuietly(writer);
IoUtil.closeQuietly(out);
}
}
protected abstract void read(StrictLineReader reader) throws IOException;
protected abstract void write(Writer writer) throws IOException;
}