and*_*ndy 3 java nio character-encoding memory-mapped-files
对于一个新项目,我必须读取文件的字符(具有可配置的编码)来处理输入.由于其中一些文件可能非常大(> 100MB),我想查看Java nio的内存映射文件的能力,以便更快地访问.
但是,我无法弄清楚,我是如何创建"Reader"的 - 就像使用正确的字符集解码从MappedByteBuffer中读取一样.
要创建MappedByteBuffer,我目前使用:
RandomAccessFile raFile = new RandomAccessFile("myFile.bla", "r");
FileChannel channel = raFile.getChannel();
MappedByteBuffer mappedByteBuffer = channel.map(MapMode.READ_ONLY, 0, channel.size());
Run Code Online (Sandbox Code Playgroud)
我知道,我可以使用getChar()从MappedByteBuffer中获取一个字符,但是如何指定编码呢?在它所说的javadoc中,总是读取两个字节并将其组合成一个char,但是ASCII编码文件是什么?
我还找到了Channels.newReader(...)方法,但是它们只能处理通道,而不能处理内存映射文件.MappedByteBuffer有类似的东西吗?
只是为了确保:我知道内存映射是一个有点昂贵的操作,因此只对较大的文件有用.我还没有决定是否使用它,但是想要根据我的特殊用例来评估它.
非常感谢提前+最好的问候,安德烈亚斯
您可以使用CharsetDecoder您最喜爱的检索Charset用Charset#newDecoder().
StandardCharsets.UTF_8.newDecoder().decode(mappedByteBuffer)
Run Code Online (Sandbox Code Playgroud)
这将返回一个CharBuffer可以从中获取char值的值.
请注意,这确实消耗了全部MappedByteBuffer.如果您只需要几个字节,请ByteBuffer从原始的几个字节构造一个新的字节MappedByteBuffer并对其进行解码.
| 归档时间: |
|
| 查看次数: |
1129 次 |
| 最近记录: |