Completion of previous fix.

This commit is contained in:
JET 2011-11-03 19:30:44 -06:00
parent 216b9a05ea
commit 2b2a2e9446

View File

@ -14,23 +14,36 @@ public class RandomAccessFile {
private long peer; private long peer;
private File file; private File file;
private long position = 0; private long position = 0;
private long length;
public RandomAccessFile(String name, String mode) public RandomAccessFile(String name, String mode)
throws FileNotFoundException throws FileNotFoundException
{ {
if (! mode.equals("r")) throw new IllegalArgumentException(); if (! mode.equals("r")) throw new IllegalArgumentException();
file = new File(name); file = new File(name);
open();
}
private void open() throws FileNotFoundException {
long[] result = new long[2]; long[] result = new long[2];
open(name, result); open(file.getPath(), result);
peer = result[0]; peer = result[0];
length = result[1];
} }
private static native void open(String name, long[] result) private static native void open(String name, long[] result)
throws FileNotFoundException; throws FileNotFoundException;
private void refresh() throws IOException {
if (file.length() != length) {
close();
open();
}
}
public long length() throws IOException { public long length() throws IOException {
return file.length(); refresh();
return length;
} }
public long getFilePointer() throws IOException { public long getFilePointer() throws IOException {
@ -50,7 +63,9 @@ public class RandomAccessFile {
if (length == 0) return; if (length == 0) return;
if (position + length > this.length()) throw new EOFException(); if (position + length > this.length) {
if (position + length > length()) throw new EOFException();
}
if (offset < 0 || offset + length > buffer.length) if (offset < 0 || offset + length > buffer.length)
throw new ArrayIndexOutOfBoundsException(); throw new ArrayIndexOutOfBoundsException();