瀏覽代碼

Adjust handling of ByteBuffer some more

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1761636 13f79535-47bb-0310-9956-ffa450edef68
tags/REL_3_16_BETA1
Dominik Stadler 7 年之前
父節點
當前提交
406bc9c6c1
共有 1 個文件被更改,包括 11 次插入12 次删除
  1. 11
    12
      src/java/org/apache/poi/poifs/nio/FileBackedDataSource.java

+ 11
- 12
src/java/org/apache/poi/poifs/nio/FileBackedDataSource.java 查看文件

@@ -88,27 +88,26 @@ public class FileBackedDataSource extends DataSource {
throw new IndexOutOfBoundsException("Position " + position + " past the end of the file");
}
// Do we read or map (for read/write?
// Do we read or map (for read/write)?
ByteBuffer dst;
int worked = -1;
if (writable) {
dst = channel.map(FileChannel.MapMode.READ_WRITE, position, length);
worked = 0;
// remember the buffer for cleanup if necessary
buffersToClean.add(dst);
// remember this buffer for cleanup
buffersToClean.add(dst);
} else {
// Read
// allocate the buffer on the heap if we cannot map the data in directly
channel.position(position);
dst = ByteBuffer.allocate(length);
worked = IOUtils.readFully(channel, dst);
}

// Check
if(worked == -1) {
throw new IndexOutOfBoundsException("Position " + position + " past the end of the file");
// Read the contents and check that we could read some data
int worked = IOUtils.readFully(channel, dst);
if(worked == -1) {
throw new IndexOutOfBoundsException("Position " + position + " past the end of the file");
}
}

// Ready it for reading
// make it ready for reading
dst.position(0);

// All done

Loading…
取消
儲存