有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java内存直接映射到字符串

我有一个文件正在通过“文件通道”映射到内存中。映射()。但是,在读取字符串时执行以下操作似乎有点奇怪:

1) read a int for the string length
2) allocate a byte[length] object
3) use .get to read length bytes
4) convert the byte[] to a string
现在我从C++背景中知道内存映射文件作为指针指向内存。那么,有没有一种好方法可以跳过使用字节数组,直接从映射内存中进行字符串转换呢


共 (3) 个答案

  1. # 1 楼答案

    想要一个数据的私有副本是不可能的。字符串是不可变的,如果它使用一个共享数组,您可以破坏它。不幸的是,没有String(CharSequence)String(ByteBuffer)构造函数

  2. # 2 楼答案

    最终,答案是否定的。但有一种方法可以将数据视为字符。看看比特伯弗。asCharBuffer()

    在内部,asCharBuffer()方法执行与您所建议的相同的操作,但是是逐字符执行的

  3. # 3 楼答案

    我建议:

    MappedByteBuffer mapped = fileChannel.map(mode, position, size);
    String s = new String(mapped.array());
    

    也可以使用映射的。asCharBuffer()并通过这种方式获取字符