Comment lire un fichier bin sur un tableau d'octets?
J'ai un fichier bin que j'ai besoin de convertir un tableau d'octets. Quelqu'un peut me dire comment faire cela?
Voici ce que j'ai à ce jour:
File f = new File("notification.bin");
is = new FileInputStream(f);
long length = f.length();
/*if (length > Integer.MAX_VALUE) {
//File is too large
}*/
//Create the byte array to hold the data
byte[] bytes = new byte[(int)length];
//Read in the bytes
int offset = 0;
int numRead = 0;
while (offset < bytes.length && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
offset += numRead;
}
//Ensure all the bytes have been read in
if (offset < bytes.length) {
throw new IOException("Could not completely read file "+f.getName());
}
Mais cela ne fonctionne pas...
Kaddy
- Je le fixe que pour vous. S'il vous plaît essayer à fait le format de questions que vous postez afin qu'ils sont intelligents et lisible.
- En quoi est-il pas de travail? Qu'est-ce que le Fichier de la classe que vous utilisez? Pourquoi ne pas utiliser la norme std::ifstream?
- Probablement parce que c'est C# et C++
- Ce n'est pas en C# je crois que c'est Java.
- Il est certainement un diable de beaucoup plus comme Java, C#, de toute façon. J'ai édité les balises en conséquence.
- Il a été marqué C++, mais qui semble avoir été retiré. J'abandonne!
- Ouais, et il a été marqué C# quand ai-je commenté. Eh bien, mon mauvais! 🙂
Vous devez vous connecter pour publier un commentaire.
essayez d'utiliser cette
Btw, voulez-vous un code Java ou C++ code. Voir le code dans votre question, je suppose qu'il soit un code java et donc a donné un java réponse
DataOutputStream
sujet?Vous êtes probablement mieux d'utiliser un fichier mappé en mémoire. Voir cette question
En Java, une solution simple est:
Si l'entrée est un fichier, on peut préallouer un tableau d'octets de la bonne taille:
Cependant, il y a probablement un moyen plus efficace de faire cette tâche à l'aide de NIO.
À moins que vous vraiment besoin de le faire seulement de cette façon, peut-être simplifier ce que vous faites.
Faire tout dans la boucle for peut sembler comme un très habile manière de faire, mais c'est se tirer une balle dans le pied quand vous avez besoin de déboguer et de ne pas voir immédiatement la solution.
Dans ce réponse j'ai lu à partir d'une URL
Vous pourrait le modifier afin de l'InputStream est à partir d'un Fichier au lieu d'un URLConnection.
Quelque chose comme:
etc
Essayer bibliothèque open source apache commons-io
IOUtils.toByteArray(inputStream)
Vous n'êtes pas le premier et pas le dernier développeur qui a besoin de lire un fichier, pas besoin de réinventer à chaque fois.