2012-04-11 67 views
2

我需要从具有指定字符集的OFFSET的文本文件中读取char [](size是COUNT)。 COUNT和OFFSET是字符,不是字节。 他是我的代码:从Java中的位置读取文本文件

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; 

有没有办法更容易吗? (没有手动匹配字符 - >字节)

我正在寻找java.util.Scanner,但它是Iterator风格,我需要随机访问风格。

PS数据should'n被多次复制

回答

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

我想** BufferedReader **在读取时使用默认的系统字符集? skip()如何工作(它只是移动文件指针或读取n个字符)? – styanton 2012-04-11 09:31:46

+0

我按照指定字符集的方式添加到答案中。 – dash1e 2012-04-11 09:36:21

+0

如果我第一次需要100-200个字符,那么50-100? – styanton 2012-04-11 09:50:33