10
votes

Java - Encodage de l'image en XML

Je pensais trouver une solution à ce problème relativement facilement, mais je demande ici à l'aide de vos dieux de me tirer de cette énigme.

Alors, j'ai une image et je veux Stockez-le dans un document XML à l'aide de Java. J'ai déjà atteint cela dans Visualbasic en enregistrant l'image dans un flux, convertissant le flux en une matrice, puis la classe XML de VB a été capable de coder le tableau comme une chaîne de base64. Mais, après quelques heures de nettoyage du Net pour une solution équivalente en Java, je suis revenu des mains vides. Le seul succès que j'ai eu a été par: xxx

qui va, je suppose, mais renversant le processus pour le récupérer à une image lorsque je charge le fichier XML a prouvé impossible. Si quelqu'un a un meilleur moyen d'encoder / de décoder une image dans un fichier XML, veuillez vous avancer, même s'il s'agit simplement d'un lien vers un autre fil irait bien.

Cheers à l'avance,

hoopla.


2 commentaires

Je vais être entièrement inutile, mais: pourquoi? Pourquoi voulez-vous stocker des images dans XML? Y a-t-il une meilleure manière de faire cela? Si je me suis retrouvé dans cette situation, je reconsidérerais ce que je vais et pourquoi.


Bonjour Mike, c'est un point valable - il est peut-être un meilleur moyen et j'ouvre des suggestions. L'objectif principal du document XML est de stocker des informations sur une université. Il conserve un éventail de campus qui maintiennent à son tour des tableaux de chambres. Les images que je stocke sont des cartes pour les campus. J'ai pensé que XML était probablement le meilleur moyen de stocker des données parent-enfant. Mais s'il vous plaît laissez-moi savoir si vous avez une meilleure suggestion!


10 Réponses :



1
votes

Votre arraytostring () code> est plutôt bizarre (quel est le point de ce séparateur?). Pourquoi ne pas simplement dire

byte[] array = s.getBytes("US-ASCII");


1 commentaires

Merci Michael, avec certitude, j'étais serré comme des pailles et j'ai copié l'exemple de quelqu'un de la façon de convertir le tableau sans vraiment y penser. Maintenant en utilisant Apaches Commons. Acclamations pour des conseils



2
votes

Après avoir obtenu votre tableau d'octet xxx

Utilisez une chaîne codée: xxx

alors vous pouvez faire des choses amusantes dans votre xml comme xxx


0 commentaires


0
votes

Le problème de base est que vous ne pouvez pas avoir de bytestream arbitraire dans un document XML, vous devez donc l'encoder en quelque sorte. Un schéma de codage fréquent est la base64, mais tout sera aussi long que le destinataire le sait.


0 commentaires


2
votes

Avec Java 6, vous pouvez utiliser Datatypeconverter pour convertir un tableau d'octets en une chaîne de base64: xxx pré>

et pour le convertir: p>

String base64String = ...
byte[] imageData = DatatypeConverter.parseBase64Binary(base64String);


0 commentaires

1
votes

Mise en œuvre la plus simple que j'ai pu effectuer est comme ci-dessous, ce qui provient du serveur au transfert XML de serveur contenant de la base de données binaires64 provient de la bibliothèque Codec Apache: - lire des données binaires de dB et créer XML

byte[] bData = strClassByteCode.getBytes("US-ASCII");
bData = Base64.decodeBase64(bData);
oPrStmt.setBytes( ++nParam, bData );
  • sur demande de serveur Lire la balise et enregistrez-la dans dB li> ul>
    Blob blobData = oRs.getBlob("ClassByteCode");
    byte[] bData = blobData.getBytes(1, (int)blobData.length());
    bData = Base64.encodeBase64(bData);
    String strClassByteCode = new String(bData,"US-ASCII");
    
    • Vishesh Sahu Li> ul> p>


0 commentaires

0
votes

Je sais que la question aking comment encoder une image via XML, mais il est également possible de simplement diffuser les octets via une demande HTTP GET au lieu d'utiliser XML et de coder une image. Notez que l'entrée est un fichierInputStream code>. Code serveur:

    FileOutputStream out = new FileOutputStream("path/to/file.png");

    for(int i : result_bytes_list){
            out.write(i);
    }
    out.close();


0 commentaires

0
votes
node.setTextContent( base64.encodeAsString( fileBytes ) )
using org.apache.commons.codec.binary.Base64

0 commentaires