What is the cause of BufferOverflowException?

前端 未结 2 1131
太阳男子
太阳男子 2021-02-18 17:02

The exception stack is

java.nio.BufferOverflowException
     at java.nio.DirectByteBuffer.put(DirectByteBuffer.java:327)
     at java.nio.ByteBuffer.put(By         


        
相关标签:
2条回答
  • 2021-02-18 17:26

    FileChannel#map:

    The mapped byte buffer returned by this method will have a position of zero and a limit and capacity of size;

    In other words, if bytes.length > file.length(), you should receive a BufferOverflowException.

    To prove the point, I have tested this code:

    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);
    }
    

    If and only if true is printed, this exception is thrown:

    Exception in thread "main" java.nio.BufferOverflowException
    at java.nio.DirectByteBuffer.put(DirectByteBuffer.java:357)
    at java.nio.ByteBuffer.put(ByteBuffer.java:832)
    
    0 讨论(0)
  • 2021-02-18 17:46

    Supposedly because your byte array is bigger then the buffer.

    put(byte [] bytes)

    I'd go by checking your file.length() and make sure that your memory buffer can actually be written.

    0 讨论(0)
提交回复
热议问题