public int doRead(byte[] b, int off, int len) throws IOException {
			if (len == 0) {
				return 0;
			}
			int cappedLen = cap(len);
			if (cappedLen <= 0) {
				return -1;
			}
			RandomAccessFile file = this.file;
			if (file == null) {
				file = RandomAccessDataFile.this.filePool.acquire();
				file.seek(RandomAccessDataFile.this.offset + this.position);
			}
			try {
				if (b == null) {
					int rtn = file.read();
					moveOn(rtn == -1 ? 0 : 1);
					return rtn;
				}
				else {
					return (int) moveOn(file.read(b, off, cappedLen));
				}
			}
			finally {
				if (this.file == null) {
					RandomAccessDataFile.this.filePool.release(file);
				}
			}
		}