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

能否使用Java的Scanner类从文件中读取byte[]字节数组?

关于Java Scanner读取byte[]的相关说明

核心问题解答

  • java.util.Scanner 本身没有原生支持直接读取byte[]字节数组的API
  • 设计定位上Scanner是文本解析工具,底层基于字符流实现,主要用来处理可打印的文本内容,并不适合读取加密后这类包含非文本二进制内容的字节数组,强制使用还可能因为字符编码转换破坏原始字节数据,完全不符合你不能转字符串的要求。

符合作业要求的实现方案

你要实现从文件读取原始byte[],推荐直接用字节流相关API操作,完全不需要转字符串,也不会改动原始字节内容,下面给两种常用实现:

方案1:JDK原生NIO API(JDK 7及以上支持,代码最简单)

直接用Files.readAllBytes()方法,一行就能读取整个文件的所有字节:

import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.IOException;

public class ReadByteArray {
    public static void main(String[] args) throws IOException {
        // 替换为你的加密密码文件路径
        byte[] encryptedPwd = Files.readAllBytes(Paths.get("encrypted_pwd.dat"));
        // 后续直接使用encryptedPwd即可,完全没有字符串转换过程
    }
}

方案2:传统IO流实现(兼容性更好,适配老版本JDK)

用FileInputStream逐段读取字节:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class ReadByteArray {
    public static void main(String[] args) throws IOException {
        File file = new File("encrypted_pwd.dat");
        byte[] encryptedPwd = new byte[(int) file.length()];
        try (FileInputStream fis = new FileInputStream(file)) {
            fis.read(encryptedPwd);
        }
        // 直接使用encryptedPwd即可
    }
}

额外注意点

  • 加密后的字节数据属于二进制内容,存储文件的时候也建议用.dat、.bin这类二进制后缀,不要存为.txt等文本格式,避免其他工具打开时自动转编码损坏数据
  • 读写全程不要用任何字符流类(包括Reader、Writer、Scanner这些),全部用字节流操作就能保证完全不会触发字符串转换,符合作业要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:06:04