SCViewer/com.minres.scviewer.databas.../src/org/apache/jdbm/StorageZip.java

72 lines
1.8 KiB
Java

package org.apache.jdbm;
import java.io.*;
import java.nio.ByteBuffer;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
/**
* A read-only storage which reads data from compressed zip archive.
* <p/>
* To improve performance with compressed archives
* each page is stored in separate file (zip archive entry).
*/
class StorageZip implements Storage {
private String zip;
private String zip2;
private ZipFile z;
StorageZip(String zipFile) throws IOException {
zip = zipFile;
z = new ZipFile(zip);
zip2 = "db";
}
public void write(long pageNumber, ByteBuffer data) throws IOException {
throw new UnsupportedOperationException("readonly");
}
public ByteBuffer read(long pageNumber) throws IOException {
ByteBuffer data = ByteBuffer.allocate(PAGE_SIZE);
ZipEntry e = z.getEntry(zip2 + pageNumber);
if(e == null)
return ByteBuffer.wrap(PageFile.CLEAN_DATA).asReadOnlyBuffer();
InputStream i = z.getInputStream(e);
new DataInputStream(i).readFully(data.array());
i.close();
return data;
}
public void forceClose() throws IOException {
z.close();
z = null;
}
public DataInputStream readTransactionLog() {
throw new UnsupportedOperationException("readonly");
}
public void deleteTransactionLog() {
throw new UnsupportedOperationException("readonly");
}
public void sync() throws IOException {
throw new UnsupportedOperationException("readonly");
}
public DataOutputStream openTransactionLog() throws IOException {
throw new UnsupportedOperationException("readonly");
}
public void deleteAllFiles() throws IOException {
}
public boolean isReadonly() {
return true;
}
}