我需要使用指定的Charset从OFFSET的文本文件中读取char [](大小为COUNT)。 COUNT和OFFSET是字符,而不是字节。 他是我的代码:
raf = new RandomAccessFile(filePath, "r");
if ((mBuffer == null) || (mBuffer.length < count)) {
mBuffer = new byte[(int)(count/mDecoder.averageCharsPerByte())];
mByteWrap = ByteBuffer.wrap(mBuffer);
mCharBuffer = new char[count];
mCharWrap = CharBuffer.wrap(mCharBuffer);
}
try {
offset = (int)(offset/mDecoder.averageCharsPerByte());
count = (int)(count/mDecoder.averageCharsPerByte());
raf.seek(offset);
raf.read(mBuffer,0,count);
mByteWrap.position(0);
mCharWrap.position(0);
mDecoder.decode(mByteWrap, mCharWrap, true);
} catch (IOException e) {
return null;
}
return mCharBuffer;
有没有更容易的方法? (没有手动匹配char-&gt;字节)
我正在寻找java.util.Scanner,但它是Iterator风格的,我需要随机访问风格。
PS数据应该多次复制
答案 0 :(得分:2)
使用BufferedReader的skip()
方法。
在你的情况下:
BufferedReader reader = new BufferedReader(new FileReader(filePath));
reader.skip(n); // chars to skip
// .. and here you can start reading
如果您想指定特定的编码,可以使用
InputStream is = new FileInputStream(filePath);
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"));
reader.skip(n); // chars to skip
// .. and here you can start reading
答案 1 :(得分:0)
你可以使用BufferedInputStream的read(byte [] b,int off,int len)
这里off是偏移的(从你想要开始阅读的位置)