Comment écrire big endian ByteBuffer à little endian en Java
J'ai actuellement un Java ByteBuffer qui dispose déjà de données en format Big Endian. Je veux écrire dans un fichier binaire comme Little-Endian.
Voici le code qui écrit simplement le fichier dans un format Big-Endian:
public void writeBinFile(String fileName, boolean append) throws FileNotFoundException, IOException
{
FileOutputStream outStream = null;
try
{
outStream = new FileOutputStream(fileName, append);
FileChannel out = outStream.getChannel();
byteBuff.position(byteBuff.capacity());
byteBuff.flip();
byteBuff.order(ByteOrder.LITTLE_ENDIAN);
out.write(byteBuff);
}
finally
{
if (outStream != null)
{
outStream.close();
}
}
}
Noter que byteBuff est un ByteBuffer qui a été rempli en format Big Endian.
Mon dernier recours est une force brute de la méthode de création d'un autre tampon et en le définissant ByteBuffer à little endian, puis la lecture de la "getInt" valeurs de l'original (big endian) de la mémoire tampon, et "setInt" la valeur pour le petit-boutiste de la mémoire tampon. J'imagine que il y a une meilleure façon...
Avez-vous essayé de Apache commons (commons.apache.org/io/api-release/org/apache/commons/io/...) pour qui?
+1 pour Apache Commons: ne pas réinventer la roue 🙂
+1 pour Apache Commons: ne pas réinventer la roue 🙂
OriginalL'auteur user1575243 | 2013-01-24
Vous devez vous connecter pour publier un commentaire.
Endianess n'a pas de sens pour un byte[]. Endianess seulement pour le multi-octets de données de type short, int, long, float ou double. Le bon moment pour obtenir l'endianess droit, c'est quand vous écrivez les données brutes pour les octets et la lecture du format réel.
Si vous avez un byte[] face à vous, vous devez décoder les types de données d'origine et de le ré-encoder avec les différents boutisme. Je suis sûr que vous serez d'accord ce n'est pas facile à faire ou idéale, b) ne peut pas être fait automatiquement.
OriginalL'auteur Peter Lawrey
Voici comment j'ai résolu un problème similaire, qui veulent obtenir le "stockage" des Entiers je suis en train d'écrire dans un fichier de sortie correct:
Il pourrait y avoir des moyens plus efficaces de le faire, mais pour mon problème, j'ai dû appliquer une transformation mathématique pour les éléments que j'ai copié dans le nouveau tampon. Mais cela doit encore travailler pour votre problème particulier.
OriginalL'auteur Ogre Psalm33