Puis-je lire un tableau d'octets à partir d'un fichier à l'aide du scanner?

0

La question

Java.util.scanner permet de lire une variété de types de données en incluant les Octets, mais qu'en byte[]? J'ai cherché de l'information sur Oracle du site ainsi que d'autres sites web, mais je vais avoir du mal à trouver de l'information sur la numérisation de byte[], alors je me demandais si c'est encore possible. Je prends un Java cours et nous avons été chargés de stocker un mot de passe crypté dans un byte[], écrire le byte[] dans un fichier, puis de lire le byte[] de retour dans. Étant donné les exigences de cette tâche, je ne peut pas convertir le byte[] pour une chaîne de caractères, il doit rester un byte[]. -- Je vous remercie par avance pour vos suggestions!

java java.util.scanner
2021-11-24 04:12:51
2

La meilleure réponse

3

nous avons été chargés de stocker un mot de passe crypté dans un byte[], écrire le byte[] dans un fichier, puis de lire le byte[] de retour dans.

Un java.util.Scanner n'est pas nécessaire pour cette tâche.

Vous pouvez écrire un byte[] à l'aide d'un OutputStream et lire un byte[] à l'aide d'un InputStream.

Il y a coupé court méthodes de lecture et d'écriture byte[] les tableaux ainsi dans le Files les méthodes de l'utilitaire:

  • public static Path write​(Path path, byte[] bytes, OpenOption... options) throws IOException
  • public static byte[] readAllBytes​(Path path) throws IOException
2021-11-24 04:21:24

merci pour la suggestion! Ce sont de nouvelles méthodes de moi, donc je suis heureux de l'apprendre.
mak95

Je crois que l'op peut être fait référence à j.u.scanner dans le contexte de la lecture du mot de passe à partir de stdin.
Emil Koutanov
2

java.util.Scanner un texte de scanner. Qui est, les octets qu'il lit à partir de l'entrée (stdin, par exemple) est tenu de se conformer à un certain jeu de caractères, généralement UTF-8.

Dans le cas de nextByte()il n'a pas de lire et de retour d'un octet un octet brut directement. Plutôt, il lit un texte et renvoie le prochain jeton comme un octet. Voici ce que la documentation de java.util.Scanner.nextByte(radix) dit (italiques ajoutés par moi):

Si le prochain jeton correspond à l'Entier expression régulière définie ci-dessus, alors le jeton est convertie en une valeur d'un octet comme si en supprimant tous les paramètres régionaux spécifiques, les préfixes, les séparateurs de groupes, et localespecific suffixes, puis de cartographie de chiffres non-ASCII dans ASCIIdigits par Caractère.chiffres, ajoutant anegative signe (-) si les paramètres régionaux spécifiques négatif des préfixes et des suffixes étaient présents, et en passant la chaîne résultante à l'Octet.parseByte avec thespecified radix.

Donc, ce que vous avez à faire est de lire comme une chaîne de caractères et la convertir en octets en utilisant le bon jeu de caractères (UTF-8, en général).

2021-11-24 05:28:28

cela prend tout son sens, et je me sens tellement stupide pour oublier que mon byte[] dans le fichier était en fait une chaîne de caractères. J'ai utilisé ma méthode toString pour l'écrire dans un fichier, donc bien sûr j'ai juste besoin de le transformer à nouveau en byte[] une fois que je l'ai lu dans. Merci pour le rappel.
mak95

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................