针对一个新项目,我需要读取文件的字符(并且可以配置编码方式)以处理输入。由于某些文件可能会相当大(>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());
我知道可以使用getChar()方法从MappedByteBuffer中获取字符,但如何指定编码呢?在javadoc中说明,始终会读取两个字节并组合成一个字符,但对于ASCII编码的文件呢?
我还发现了Channels.newReader(...)方法,但它只能处理通道,而不能处理内存映射文件。是否有类似于MappedByteBuffer的方法呢?
只是为了确保:我知道内存映射是一种比较昂贵的操作,因此仅适用于较大的文件。我还没有决定是否要使用它,但想为我的特殊用例评估一下。
非常感谢您的帮助,谢谢!
Charset
构造一个String
? - Sotirios Delimanolis