2012-04-28 5 views
5

ファイルからサブシーケンスを読み取るのに次のコードを使用しています。CharBufferのJava NIO発行

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(バッファ)を追加します。出力 "java.nio.DirectByteBufferR [pos = 0 lim = 16 cap = 16]"を出力します。

System.out.println((char)buffer.get(0))は、第1文字を意味します。

+0

abc.txt' 'の内容は何ですか? – Jeffrey

+0

@ジェフリー、 "011000111 ......"シリーズの0/1ビット。 – Arpssss

+0

@Jeffrey、System.out.println(バッファ)を追加すると出力に "java.nio.DirectByteBufferR [pos = 0 lim = 16 cap = 16]"というメッセージが表示される – Arpssss

答えて

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); 
+0

ありがとうございます。しかし、私は私の質問にいくつかの変更を加える。上記のコードを実行することは可能ですか?実際には、私はサブストリングを抽出したい。私は上記のコードはあまり効率的ではないと思う。 – Arpssss

+0

@Arpssssあなたは読み込み専用モードですので、 'asReadOnlyBuffer'を使う方が良いでしょう。私は 'asCharBuffer'で私のコンピュータ上でいくつかのテストをしました。私は1/2バイトしか得ていません。 –

+0

私のコードをテストしました。実際には、問題は "CharBuffer cbuf = buffer.asCharBuffer()"の実行中に発生します。たぶんエンコードの問題。 – Arpssss

関連する問題