11
votes

En Java, lors de l'écriture d'un fichier avec DataOutPutStream, comment définir l'Endian des données écrites?

J'utilise dataOutputStream code> pour écrire dans un fichier, mais je veux modifier l'Endian des données.

Voici comment je vais écrire les données d'octets dans le fichier (it Sorties en peu d'Endian par défaut) P>

public void generateBinObjFile(String outputFile)
    try {
        // Create file

        DataOutputStream stream = new DataOutputStream(
                new FileOutputStream(outputFile));

        stream.writeShort(this.quantize(this.xComponents.get(index), //<-- Short is written in little Endian
                    this.min_x, this.max_x) - 32768);

        } // catch statements here


0 commentaires

5 Réponses :


0
votes

Vous ne pouvez pas :

Écrit un court-circuit au flux de sortie sous-jacent sous forme de deux octets, d'abord élevé d'octets.

Tous les méthodes "multi-octets" fonctionnent comme ça. Si vous en avez besoin, vous avez besoin d'écrire vous-même des octets.


0 commentaires

-1
votes

Il génère les données d'une manière lisible par DataGuThetstream.

Si vous devez vous soucier de l'endansness, vous ne devez pas utiliser de flux de données *.


0 commentaires

12
votes

Vous ne pouvez pas faire cela avec dataOutputStream , qui utilise toujours Big Endian.

vous peut utiliser un bytebuffer sur lequel vous pouvez appeler Commande () Pour influencer la manière dont il se lit et écrit des données.

Vous pouvez utiliser le bytebuffer pour préparer un octet [] que vous écrirez avec un de sortie classique plus tard sur ou aller entièrement à Nio et utilisez n'importe quel ECONNAIREBYTECHANNEL pour l'écriture


3 commentaires

Il est indiqué "Impossible d'instancier le type" BYTEBUFFER "" .Je'm à l'aide du nouveau mot-clé pour en créer un objet, existe-t-il un moyen différent ou plus correct de créer une instance d'un objet?


@Deztructius: Vérifiez le Javadoc que j'ai lié, s'il vous plaît.


Vous pouvez utiliser bytebuffer.allocateectirect (intorm int)



0
votes

Toutes les réponses données ont raison. Vous pouvez cependant prendre la source de DataOutputStream, la coller dans une nouvelle classe et inverser l'ordre des octets dans les différents Writeshort, Writelong, etc. (ou du moins dans ceux dont vous avez besoin). Ce n'est pas un travail si difficile.

Évidemment, vous ne pouvez pas ensuite l'utiliser pour communiquer avec une DataGutant de l'autre côté, mais je suppose que vous devez écrire dans un fichier ou un socket avec un programme C de l'autre côté, vous n'avez donc pas besoin de DataGuTReam. < / p>


0 commentaires