You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java读取文件字节数组开头多[-17,-69,-65]的原因咨询

为什么读取UTF-8文件的字节数组开头多出[-17,-69,-65]?

那三个字节其实是UTF-8编码的BOM(Byte Order Mark,字节顺序标记),具体来给你拆解一下:

什么是UTF-8 BOM?

BOM是一个特殊的字节序列,原本是用来标记多字节编码(比如UTF-16、UTF-32)的字节顺序,但对于UTF-8来说它是可选的。不过有些编辑器(比如Windows系统自带的记事本)在保存UTF-8格式文件时,会自动在文件开头加上这个BOM,对应的十六进制是EF BB BF,转换成十进制就是你看到的[-17,-69,-65]。

为什么代码里的字符串没有这三个字节?

你在Java代码里直接定义的字符串"‘destructive’",Java编译器在处理这个字符串时,不会给它添加BOM——因为BOM是文件存储层面的标记,不是字符串本身的内容。所以当你把这个字符串转成UTF-8字节数组时,自然就没有那三个额外的字节。

怎么解决这个问题?

如果你不想让读取的内容包含BOM,可以试试这两种方式:

  • 修改文件保存格式:用编辑器(比如VS Code、Notepad++)打开TestFIle.txt,选择以「UTF-8 无BOM」的格式重新保存。
  • 读取时跳过BOM:使用Apache Commons IO里的BOMInputStream来包裹文件输入流,它会自动识别并跳过UTF-8 BOM,示例代码大概是这样的:
try (BOMInputStream bis = new BOMInputStream(new FileInputStream(file))) {
    String content = IOUtils.toString(bis, StandardCharsets.UTF_8);
    byte[] file_encoded = content.getBytes(StandardCharsets.UTF_8);
    // 处理内容
}

内容的提问来源于stack exchange,提问作者user3164187

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 16:27:51