内存映射直接到字符串

时间:2011-04-29 19:44:14

标签: java memory-mapped-files

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

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 个答案:

答案 0 :(得分:3)

最终,没有。但是有一种方法可以将数据视图作为字符。看看ByteBuffer.asCharBuffer()。

在内部,asCharBuffer()方法与你提出的方法相同,但是以char-by-char为基础。

答案 1 :(得分:3)

我建议:

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

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

答案 2 :(得分:1)

没有绕过String想要私有的数据副本。字符串是不可变的,如果它使用共享数组,你可以打破它。遗憾的是,没有String(CharSequence)String(ByteBuffer)构造函数。