提问人:Suvid Sahay 提问时间:9/9/2023 更新时间:9/10/2023 访问量:30
使用 BufferedReader 从文件中读取是在 String 字节数组中给出垃圾字节值,如负字节
Reading from a file using BufferedReader is giving garbage byte values in the String byte array like negative bytes
问:
我正在尝试从 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]
知道是什么原因导致了这个问题吗?
答:
1赞
g00se
9/10/2023
#1
我的猜测是你应该读成 UTF-16。告示符号是每个非 null 字节之前的 null 字节。这意味着 UTF-16 的双字节编码对于“ascii”字符来说是多余的,这就是为什么 UTF-8 被更多地使用的原因,但某些语言除外
评论
new InputStreamReader(is, "UTF-16")
应该整理一下