使用 BufferedReader 从文件中读取是在 String 字节数组中给出垃圾字节值,如负字节

Reading from a file using BufferedReader is giving garbage byte values in the String byte array like negative bytes

提问人:Suvid Sahay 提问时间:9/9/2023 更新时间:9/10/2023 访问量:30

问:

我正在尝试从 srt 文件中读取内容,并且我正在使用 Java 的 BufferedReader 逐行读取文件。srt 文件中的内容为:

2
00:00:40,665 --> 00:00:44,806
<i>♪ Nants ingonyama ♪</i>

代码片段如下:

public void parseSubtitles(@NonNull final MultipartFile subtitleFile) {
    InputStream is = subtitleFile.getInputStream();
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    String line;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
}

在调试代码时,通过添加断点,我发现在读取第一行时,字节数组值为 。2[-3, -1, -3, -1, 50, 0, 0, 0]

那么下一行只是一个带有值的字节数组[0]

下一行是,在这种情况下是字幕的时间间隔。[0, 48, 0, 48, 0, 58, 0, 48, 0, 48, 0, 58, 0, 52, 0, 48, 0, 44, 0, 54, 0, 54, 0, 53, 0, 32, 0, 45, 0, 45, 0, 62, 0, 32, 0, 48, 0, 48, 0, 58, 0, 48, 0, 48, 0, 58, 0, 52, 0, 52, 0, 44, 0, 56, 0, 48, 0, 54, 0]

其他字幕文件并非如此,因为字节数组中没有值,也没有像 null 值的字节数组那样的垃圾行。0[0]

知道是什么原因导致了这个问题吗?

Java 数组字节 bufferedreader

评论

0赞 g00se 9/9/2023
MultipartFile:该类型的完全限定名称是什么?我的猜测是你应该读成 UTF-16
1赞 g00se 9/9/2023
new InputStreamReader(is, "UTF-16")应该整理一下
0赞 Suvid Sahay 9/10/2023
@g00se 是的,以 UTF-16 格式读取是有效的。你能添加一个答案,这样我就可以接受它。

答:

1赞 g00se 9/10/2023 #1

我的猜测是你应该读成 UTF-16。告示符号是每个非 null 字节之前的 null 字节。这意味着 UTF-16 的双字节编码对于“ascii”字符来说是多余的,这就是为什么 UTF-8 被更多地使用的原因,但某些语言除外