如何解决如何在NIO中将字节从ByteBuffer解码为UTF-8符号?
我需要使用NIO读取并打印文件中的一些文本。代码可以很好地使用英语,但是对于俄语,我需要以UTF-8解码字节。 我不了解将字节转换为UTF-8符号的顺序。你能帮忙吗?
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import java.nio.file.*;
public class Practice {
public static void main(String[] args) {
try (FileChannel fChan = (FileChannel) Files.newByteChannel(Paths.get("D:/test.txt"))) {
ByteBuffer byteBuf = ByteBuffer.allocate(16);
int count;
do {
count = fChan.read(byteBuf);
if(count != -1) {
byteBuf.rewind();
for(int i = 0; i < count; i++) {
System.out.print((char) byteBuf.get());
}
}
} while(count != -1);
} catch(InvalidPathException e) {
System.out.println("Path exception " + e);
} catch(IOException e) {
System.out.println("IO Exception " + e);
}
}
}
解决方法
要从ByteBuffer
中读取UTF-8编码的文本,可以将其解码为CharBuffer
:
CharBuffer charBuffer = StandardCharsets.UTF_8.decode(byteBuffer);
要获得更细粒度的访问,请使用基础的CharsetDecoder
:
CharsetDecoder charsetDecoder = StandardCharsets.UTF_8.newDecoder();
如果您真的想自己获取原始字节并使用UTF-8对其进行解码,那么您首先需要学习UTF-8的工作原理,因此请在网络上搜索UTF-8并开始阅读,因为问题写了,听起来你还不知道。要为此实际编写代码,您还需要知道如何用Java进行位操作,因此,如果您也不知道该怎么做,请进行另一次Web搜索并开始阅读。如果您不能同时使用这些信息,请写一个新问题,解释您所知道的,以及是什么使您无法将自己的知识应用于问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。