5

我正在使用以下代码从文件中读取子序列。

FileChannel channel = new RandomAccessFile("abc.txt", "r").getChannel();
ByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
CharBuffer cbuf = buffer.asCharBuffer();

String str = cbuf.subSequence(0, 1).toString();
System.out.println("str = " + str);

但是,这会给出输出“str = ?” 任何人都可以帮助我为什么会发生这种情况以及如何解决这个问题?抱歉,我是 NIO 的新手。

附加的东西,当我添加 System.out.println(buffer); 它给出输出“java.nio.DirectByteBufferR[pos=0 lim=16 cap=16]”。

System.out.println((char)buffer.get(0)) 给出正确的输出意味着第一个字符。

4

1 回答 1

3

试试这个方法,你有一个编码问题:

    FileChannel channel = new RandomAccessFile("/home/alain/Bureau/clair.txt", "r").getChannel();
    ByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
    Charset chars = Charset.forName("ISO-8859-1");
    CharBuffer cbuf = chars.decode(buffer);
    String str = cbuf.subSequence(0, 10).toString();
    System.out.println("str = " + str);
于 2012-04-28T16:35:15.617 回答