В чем причина BufferOverflowException?
стек исключений
java.nio.BufferOverflowException
at java.nio.DirectByteBuffer.put(DirectByteBuffer.java:327)
at java.nio.ByteBuffer.put(ByteBuffer.java:813)
mappedByteBuffer.put(bytes);
код:
randomAccessFile = new RandomAccessFile(file, "rw");
fileChannel = randomAccessFile.getChannel();
mappedByteBuffer = fileChannel.map(MapMode.READ_WRITE, 0, file.length());
и звонок mappedByteBuffer.put(bytes);
в чем причина mappedByteBuffer.put(bytes)
выбрасывает BufferOverflowException
Как найти причину ?
2 ответов
отображенный байтовый буфер, возвращаемый этим методом, будет иметь нулевую позицию и ограничение и емкость размера;
другими словами, если 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)
якобы потому, что Ваш массив байтов больше, чем буфер.
Я бы проверил ваш файл.length () и убедитесь, что буфер памяти действительно может быть записан.