package org.krakenapps.util.directoryfile.test;
import static org.junit.Assert.assertEquals;
import java.io.File;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import org.junit.Test;
import org.krakenapps.util.directoryfile.DirectoryFileArchive;
import org.krakenapps.util.directoryfile.SplitDirectoryFileInputStream;
import org.krakenapps.util.directoryfile.SplitDirectoryFileOutputStream;
public class SplitFileAndDirectoryFileArchiveTest {
@Test
public void testSplitDirectoryFileOutputStream() throws IOException {
File base = new File(System.getProperty("kraken.data.dir"), "test\\ds\\ttt");
DirectoryFileArchive dfa = DirectoryFileArchive.open(base.getAbsolutePath());
SplitDirectoryFileOutputStream stream = new SplitDirectoryFileOutputStream(1024768, dfa, new File(base,
"numbers.dat"));
ArrayList<Integer> numbers = new ArrayList<Integer>(NUMBER_COUNT);
writeRandomNumbers(numbers, stream);
stream.close();
SplitDirectoryFileInputStream sfis = new SplitDirectoryFileInputStream(1024768, dfa, new File(base,
"numbers.dat"));
ByteBuffer buf = ByteBuffer.allocate(8192);
buf.limit(0);
for (int i = 0; i < NUMBER_COUNT; ++i) {
if (buf.remaining() < 4) {
int remaining = buf.remaining();
buf.compact();
int read = sfis.read(buf.array(), remaining, buf.capacity() - remaining);
buf.limit(remaining + read);
}
assertEquals((int) numbers.get(i), buf.getInt());
}
sfis.close();
dfa.close();
}
private final int NUMBER_COUNT = 1024768;
private void writeRandomNumbers(List<Integer> numbers, SplitDirectoryFileOutputStream sfos) throws IOException {
Random r = new Random();
ByteBuffer buf = ByteBuffer.allocate(8192);
for (int i = 0; i < NUMBER_COUNT; ++i) {
int rn = r.nextInt();
if (numbers != null)
numbers.add(rn);
if (buf.remaining() < 4) {
sfos.write(buf.array(), 0, buf.position());
buf.clear();
}
buf.putInt(rn);
}
sfos.write(buf.array(), 0, buf.position());
}
}