使用MappedByteBuffer时IndexOutOfBoundsException

时间:2017-07-25 21:38:08

标签: java nio bytebuffer mappedbytebuffer

我正在考虑使用MappedByteBuffer将一些数据存储/加载到文件中。假设我有一个long类型的字段A,字符串的字段B在序列化时如下所示: A(长)| B(字符串)

现在我想写信并阅读它。这是一段示例代码:

RandomAccessFile file = new RandomAccessFile(dataPath.toString(), "rw");
    MappedByteBuffer mbb = file.getChannel().map(FileChannel.MapMode
            .READ_WRITE, 0, 256);
    long num = 500;
    mbb.putLong(0, num); // (1) first write the long value at beginning
    String str = "Hello World!";
    byte[] input = str.getBytes();
    //then write a string
    mbb.put(input, 8, input.length); // (2) IndexOutOfBoundsException

所以稍后我可以通过致电mbb.getLong(0)来检索长 和mbb.get(outputArray,8,outputArray.length)

但现在我失败了(2)。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

尝试

mbb.put(destArray, 0, sourceArray.length)

我不认为你想以8字节偏移量开始写入,否则你会试图在数组的长度上写入8个字节。