能否使用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
相关产品推荐
相关产品推荐

