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 に答える