gpt4 book ai didi

Java nio : How to read characters from memory mapped file with correct charset

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:45:48 26 4
gpt4 key购买 nike

对于一个新项目,我必须读取文件的字符(具有可配置的编码)来处理输入。由于其中一些文件可能非常大(> 100MB),我想检查一下 Java nio 内存映射文件以加快访问速度的能力。

但是,我无法弄清楚,我如何能够创建一些“阅读器”——比如使用正确的字符集解码从 MappedByteBuffer 中读取。

要创建 MappedByteBuffer,我目前使用:

    RandomAccessFile raFile = new RandomAccessFile("myFile.bla", "r");
FileChannel channel = raFile.getChannel();
MappedByteBuffer mappedByteBuffer = channel.map(MapMode.READ_ONLY, 0, channel.size());

我知道,我可以使用 getChar() 从 MappedByteBuffer 中获取一个字符,但是如何指定编码呢?在 javadoc 中指出,总是读取两个字节并将其合并为一个字符,但是 ASCII 编码文件是什么?

我还找到了 Channels.newReader(...) 方法,但是它只能处理 channel ,不能处理内存映射文件。 MappedByteBuffer 是否有类似的东西?

只是为了确定:我知道内存映射是一个有点昂贵的操作,因此只对较大的文件有用。我(还)没有决定是否使用它,但想针对我的特殊用例评估它。

非常感谢 + 最诚挚的问候,安德烈亚斯

最佳答案

您可以使用 CharsetDecoder从你最喜欢的Charset中检索与 Charset#newDecoder() .

StandardCharsets.UTF_8.newDecoder().decode(mappedByteBuffer)

这将返回一个 CharBuffer从中你可以get char values .

请注意,这会消耗完整的 MappedByteBuffer。如果您只需要几个字节,请从原始 MappedByteBuffer 的几个字节构造一个新的 ByteBuffer 并对其进行解码。

关于Java nio : How to read characters from memory mapped file with correct charset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26740370/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com