Newer
Older
package azgracompress.cache;
import azgracompress.quantization.vector.VQCodebook;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class VQCacheFile implements ICacheFile {
private CacheFileHeader header;
private VQCodebook codebook;
public VQCacheFile() {
}
public VQCacheFile(final CacheFileHeader header, final VQCodebook codebook) {
this.header = header;
this.codebook = codebook;
assert (header.getCodebookSize() == codebook.getCodebookSize());
}
public void writeToStream(final DataOutputStream outputStream) throws IOException {
final int[][] entries = codebook.getVectors();
for (final int[] entry : entries) {
for (final int vectorValue : entry) {
outputStream.writeShort(vectorValue);
}
}
final long[] frequencies = codebook.getVectorFrequencies();
for (final long vF : frequencies) {
outputStream.writeLong(vF);
}
}
public void readFromStream(final DataInputStream inputStream) throws IOException {
header = new CacheFileHeader();
header.readFromStream(inputStream);
readFromStream(inputStream, header);
}
public void readFromStream(final DataInputStream inputStream, final CacheFileHeader header) throws IOException {
this.header = header;
final int codebookSize = header.getCodebookSize();
final int entrySize = header.getVectorSizeX() * header.getVectorSizeY() * header.getVectorSizeZ();
final int[][] vectors = new int[codebookSize][entrySize];
final long[] frequencies = new long[codebookSize];
for (int i = 0; i < codebookSize; i++) {
//int[] vector = new int[entrySize];
vectors[i][j] = inputStream.readUnsignedShort();
}
}
for (int i = 0; i < codebookSize; i++) {
frequencies[i] = inputStream.readLong();
}
codebook = new VQCodebook(header.getVectorDim(), vectors, frequencies);
}
public CacheFileHeader getHeader() {
return header;
}
public VQCodebook getCodebook() {
return codebook;
}
public void report(final StringBuilder builder) {
final int[][] vectors = codebook.getVectors();
for (final int[] vector : vectors) {
builder.append("- - - - - - - - - - - - - - - - - - - - - - - - -\n");
for (final int x : vector) {
builder.append(x).append(';');
}
@Override
public String klass() {
return "VQCacheFile";
}