Question

Je cherche quelque chose de simple (pas lib externe de préférence) pour écrire et charger un octet [] à partir d'un fichier. Plus ou moins quelque chose comme [le cornichon de Python] [1].

byte[] bytes = new byte[10];
ByteBuffer bbuf = new ByteBuffer.allocate(bytes.length);
bbuf.wrap(bytes);   // edited due to Jon Skeet's answer
CharBuffer cbuf = bbuf.asCharBuffer();
cbuf.put("t");
FileOutputStream test = new FileOutputStream("somebytes");
test.write(bytes);
test.close();

Le problème semble être que je ne peux pas lire la structure de l'objet à partir d'un fichier comme ça. Dans un éditeur hexadécimal De plus, le fichier « somebytes » contient juste un couple ou 0s. Donc, il ne semble pas FileOutputStream met tout le contenu ( « t » ou l'équivalent octet) en elle.

[1] http://wiki.python.org/moin/UsingPickle

Était-ce utile?

La solution

Vous avez attribué un tampon d'octets avec Taille de bytes, mais cela ne signifie pas que le tampon d'octets est associé au tableau d'octets. Vous pouvez envelopper un tableau d'octets en utilisant ByteBuffer.wrap.

Voici un changement minimal à votre code qui ne écrire le t dans le fichier:

byte[] bytes = new byte[10];
ByteBuffer bbuf = ByteBuffer.wrap(bytes);
CharBuffer cbuf = bbuf.asCharBuffer();
cbuf.put("t");
FileOutputStream test = new FileOutputStream("somebytes");
test.write(bytes);
test.close();

Notez que pour le code réel, vous devez utiliser un bloc try / finally pour vous assurer que le fichier est toujours fermé indépendamment des exceptions.

Cependant, cela est loin de sérialisation. Java Finalité avoir son propre sérialisation binaire - voir ObjectOutputStream et href="http://download.oracle.com/javase/6/docs/api/java/io/ObjectInputStream.html" rel="nofollow"> ObjectInputStream . Personnellement, je l'habitude d'éviter ce genre de sérialisation cependant, comme il peut être très fragile face à des changements apportés aux classes. Il existe plusieurs autres approches de sérialisation, telles que l'utilisation ou buffers Thrift Protocole pour la sérialisation binaire ou sérialisation XML, JSON ou un autre format lisible par l'homme.

Autres conseils

Vous pouvez

seek(position)
b = read(length)

Alors b sera un tableau d'octets de votre longueur.

Désolé -. Relisant que vous êtes à la recherche pour l'écriture, ne pas lire

Une version plus simple de la même chose est.

byte[] bytes = new byte[10];
bytes[1] = 't';

FileOutputStream test = new FileOutputStream("somebytes");
test.write(bytes);
test.close();

Il y a beaucoup d'exemples sur la façon de lecture / écriture octet [] à partir de fichiers sur le web. essayez google.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top