我可以使用扫描仪从文件中读取字节数组吗?

Can I read a byte array from file using scanner?

Java.util.scanner可以读取包括Byte在内的多种数据类型,但是byte[]呢?我已经在 Oracle 的网站和其他网站上搜索过信息,但我无法找到有关扫描 byte[] 的信息,所以我想知道是否有可能。我正在上 Java 课程,我们的任务是将加密密码存储到 byte[],将 byte[] 写入文件,然后再读回 byte[]。鉴于此任务的要求,我无法将 byte[] 转换为字符串,它必须保留为 byte[]。 -- 预先感谢您的建议!

we were tasked with storing an encrypted password into a byte[], write the byte[] to file, then read the byte[] back in.

此任务不需要 java.util.Scanner

您可以使用 OutputStream and read a byte[] using a InputStream 编写 byte[]

Files实用方法中也有读取和写入byte[]数组的快捷方法:

  • public static Path write​(Path path, byte[] bytes, OpenOption... options) throws IOException
  • public static byte[] readAllBytes​(Path path) throws IOException

java.util.Scanner 是一个文本扫描器。也就是说,它从输入(比如标准输入)中读取的字节应该符合特定的字符集,通常是 UTF-8。

nextByte()的情况下,它不会直接读取和return一个字节作为原始字节。相反,它读取一个文本并 return 将下一个标记作为一个字节。以下是 java.util.Scanner.nextByte(radix) 的文档所说的(强调由我添加):

If the next token matches the Integer regular expression defined above then the token is converted into a byte value as if by removing all locale specific prefixes, group separators, and localespecific suffixes, then mapping non-ASCII digits into ASCIIdigits via Character.digit, prepending anegative sign (-) if the locale specific negative prefixes and suffixes were present, and passing the resulting string to Byte.parseByte with thespecified radix.

因此,您需要做的是读取字符串并使用正确的字符集(通常是 UTF-8)将其转换为字节。