使用 BufferedReader 从文件中读取会在字符串字节数组中提供垃圾字节值,如负字节

问题描述 投票:0回答:1

我正在尝试从 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]
,在本例中是字幕的时间间隔。

其他字幕文件的情况并非如此,因为字节数组中没有

0
值,也没有像具有空值
[0]
的字节数组那样的垃圾行。

知道可能导致此问题的原因吗?

java arrays byte bufferedreader
1个回答
0
投票

我的猜测是您应该阅读为 UTF-16。指示标志是每个非空字节之前的空字节。这意味着 UTF-16 的两字节编码对于“ascii”字符来说是多余的,这就是为什么 UTF-8 被更多地使用,除了某些语言的情况

© www.soinside.com 2019 - 2024. All rights reserved.