java - 使用 MappedByteBuffer 时出现 IndexOutOfBoundsException

标签 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) 来检索 long
mbb.get(outputArray,8,outputArray.length)

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

最佳答案

尝试

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

我认为您不想从 8 字节偏移量开始写入,否则您会尝试在数组长度上写入 8 字节。

关于java - 使用 MappedByteBuffer 时出现 IndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45313930/

相关文章:

java - 从在 Tomcat 上运行的应用程序 (Java) 访问 Outlook2003(作为服务启动)

java - 边界框无法正常工作 -/withkinect

java - 为什么 NIO 选择器总是监听端口列表中的最后一个端口?

Java 字节缓冲区类

Java - 将 Int 转换为 Byte - 奇怪的结果

java - 将 ByteBuffer 与 JAXB 结合使用

java - 在谷歌地图 V2 ... fragment.getMap() 返回 null

java - 如何通过容器 View 重新显示和恢复以前添加的 fragment

java - 如何正确使用NIO选择器?

java - ChannelOutboundHandlerAdapter 未被调用