private final static Random random = new Random();
private void doTestRandomReadWrite(int size) throws IOException {
byte[] data = new byte[size];
random.nextBytes(data);
TemporaryData tmp = new TemporaryData(16, 1024, "test", ".dat");
try {
OutputStream out = tmp.getOutputStream();
// Write the test data in chunks with random size
int offset = 0;
while (offset < data.length) {
int c = Math.min(512 + random.nextInt(1024), data.length - offset);
out.write(data, offset, c);
offset += c;
}
out.close();
assertEquals(size, tmp.getLength());
// Reread the test data, again in chunks with random size
InputStream in = tmp.getInputStream();
offset = 0;
byte[] data2 = new byte[data.length];
byte[] buffer = new byte[2048];
while (true) {
int bufferOffset = random.nextInt(512);
int c = 512 + random.nextInt(1024);
int read = in.read(buffer, bufferOffset, c);
if (read == -1) {
break;
}
int newOffset = offset + read;
assertTrue(newOffset <= data2.length);
System.arraycopy(buffer, bufferOffset, data2, offset, read);
offset = newOffset;
}
assertEquals(data2.length, offset);
in.close();
assertTrue(Arrays.equals(data, data2));
}
finally {
tmp.release();
}
}