我正在使用以下代码从文件中读取子序列.
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);
Run Code Online (Sandbox Code Playgroud)
但是,这给出了输出"str =?" 任何人都可以帮助我为什么会发生这种情况以及如何解决这个问题?对不起,我是NIO的新手.
另外一件事,当我添加System.out.println(缓冲区); 它给出输出"java.nio.DirectByteBufferR [pos = 0 lim = 16 cap = 16]".
System.out.println((char)buffer.get(0))给出正确的输出意味着第一个字符.
尝试使用此方法,您遇到编码问题:
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1524 次 |
| 最近记录: |