fix for outofbounds-excception in EcoFS chunk iterator

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@4657 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
orbiter 17 years ago
parent 41e9c5723c
commit 319144f4b2

@ -25,12 +25,12 @@
package de.anomic.kelondro; package de.anomic.kelondro;
import java.io.BufferedInputStream; import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile; import java.io.RandomAccessFile;
import java.util.Iterator; import java.util.Iterator;
@ -529,7 +529,7 @@ public class kelondroEcoFS {
public static class ChunkIterator implements Iterator<byte[]> { public static class ChunkIterator implements Iterator<byte[]> {
private int recordsize, chunksize; private int recordsize, chunksize;
private InputStream stream; private DataInputStream stream;
/** /**
* create a ChunkIterator * create a ChunkIterator
@ -545,7 +545,7 @@ public class kelondroEcoFS {
assert file.length() % recordsize == 0; assert file.length() % recordsize == 0;
this.recordsize = recordsize; this.recordsize = recordsize;
this.chunksize = chunksize; this.chunksize = chunksize;
this.stream = new BufferedInputStream(new FileInputStream(file), 64 * 1024); this.stream = new DataInputStream(new BufferedInputStream(new FileInputStream(file), 64 * 1024));
} }
public boolean hasNext() { public boolean hasNext() {
@ -562,11 +562,9 @@ public class kelondroEcoFS {
int r; int r;
try { try {
// read the chunk // read the chunk
r = this.stream.read(chunk); this.stream.readFully(chunk);
while (r < chunksize) {
r += this.stream.read(chunk, r, chunksize - r);
}
// skip remaining bytes // skip remaining bytes
r = chunksize;
while (r < recordsize) { while (r < recordsize) {
r += this.stream.skip(recordsize - r); r += this.stream.skip(recordsize - r);
} }

Loading…
Cancel
Save