如何将 UTF-8 字节块转换为字符?

Mod*_*ire 5 java utf-8 character-encoding

我有一个大的 UTF-8 输入,它被分成 1 kB 大小的块。我需要使用接受 String 的方法来处理它。就像是:

for (File file: inputs) {
     byte[] b = FileUtils.readFileToByteArray(file);
     String str = new String(b, "UTF-8");
     processor.process(str);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我不能保证任何 UTF-8 字符不会被分割成两个块。运行我的代码的结果是某些行以“?”结尾,这会损坏我的输入。

解决这个问题的好方法是什么?

eri*_*son 3

如果我理解正确的话,您有一个很大的文本,用 UTF-8 编码,然后分割成 1 KB 的文件。现在您想要读回文本,但您担心编码字符可能会跨文件边界分割,并导致 UTF-8 解码错误。

该 API 有点陈旧,但有一个可以从一系列子流中SequenceInputStream创建看似单个的内容。InputStream使用实例集合创建其中一个实例FileInputStream,然后创建一个实例InputStreamReader,将 UTF-8 字节流解码为应用程序的文本。