Ответ 1
Отображенный байт-буфер, возвращаемый этим методом, будет иметь положение нуля и ограничение и емкость размера;
Другими словами, если bytes.length > file.length()
, вы должны получить BufferOverflowException
.
Чтобы доказать эту точку, я проверил этот код:
File f = new File("test.txt");
try (RandomAccessFile raf = new RandomAccessFile(f, "rw")) {
FileChannel ch = raf.getChannel();
MappedByteBuffer buf = ch.map(MapMode.READ_WRITE, 0, f.length());
final byte[] src = new byte[10];
System.out.println(src.length > f.length());
buf.put(src);
}
Если и только если напечатан true
, это исключение выдается:
Exception in thread "main" java.nio.BufferOverflowException
at java.nio.DirectByteBuffer.put(DirectByteBuffer.java:357)
at java.nio.ByteBuffer.put(ByteBuffer.java:832)