public class BlobToXMLTest{
public static class BlobXMLWrapper{
private byte[] blob;
public BlobXMLWrapper(){ }
public void setBlob(byte[] blob) { this.blob=blob; }
public byte[] getBlob() { return blob; }
}
public static void main(String[] args) throws Exception{
byte[] BYTE_ARRAY = null; // hier dein byte array, das du aus der DB hast
BlobXMLWrapper blobXMLWrapper = new BlobXMLWrapper();
blobXMLWrapper.setBlob(BYTE_ARRAY);
XMLEncoder enc = new XMLEncoder(new FileOutputStream(new File("DATEINAME")));
enc.writeObject(blobXMLWrapper);
enc.flush();
XMLDecoder dec = new XMLDecoder(new FileInputStream(new File("DATEINAME")));
BlobXMLWrapper readObject = (BlobXMLWrapper) dec.readObject();
byte[] arra = readObject.getBlob(); // Byte-Array ist wieder deserialisiert.
}
}
Allerdings ist die Struktur des erzeugten XMLs ja festgelegt. Deswegen ist XMLEncoder für selbst definierte XML-Strukturen nicht geeignet. Oder habe ich was übersehen?
Ja, so hab ich das auch verstanden. "Mal schnell und einfach in lesbarer Form den Zustand eines Objekts wegschreiben." gefällt mirDiese XML*coder sind soweit ich das sehe, eine Alternative zur binären Serialisierung
Alles, was man mit XML-Schemas definiert.Aber was meinst du mit selbstdefinierten XML-Strukturen?
Ja, so hab ich das auch verstanden. "Mal schnell und einfach in lesbarer Form den Zustand eines Objekts wegschreiben." gefällt mir
Alles, was man mit XML-Schemas definiert.
Base64.encodeBase64(byte[])
public static void main(String args[]) {
XMLTool tool;
try {
tool = new XMLTool();
tool.setLoggerLevel(Level.ALL);
tool.setFormatting(true);
tool.setFile(new File("src/tests/xml-samples/bloob.xml"));
XPath xpath = new XPath("maincats/maincat/subcats/subcat/articles/article[aID=1]/img/");
byte[] deinBloob = null; //Hier natürlich deine Daten
String daten = Base64.encodeBase64String(deinBloob)
tool.addTextToElement(xpath, daten);
tool.execute();
} catch (Exception e) {
e.printStackTrace();
}
}
public class Base64Coding
{
private final static char[] ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".toCharArray();
private static int[] toInt = new int[128];
static
{
for (int i = 0; i < ALPHABET.length; i++)
{
toInt[ALPHABET[i]] = i;
}
}
/**
* Codiert das übergeben Byte[] in einen Base64-String
* *
* @param Byte[] welches codiert werden soll
* @return Der Base64-Codierte String
*/
public static String encode(byte[] buf)
{
int size = buf.length;
char[] ar = new char[((size + 2) / 3) * 4];
int a = 0;
int i = 0;
while (i < size)
{
byte b0 = buf[i++];
byte b1 = (i < size) ? buf[i++] : 0;
byte b2 = (i < size) ? buf[i++] : 0;
int mask = 0x3F;
ar[a++] = ALPHABET[(b0 >> 2) & mask];
ar[a++] = ALPHABET[((b0 << 4) | ((b1 & 0xFF) >> 4)) & mask];
ar[a++] = ALPHABET[((b1 << 2) | ((b2 & 0xFF) >> 6)) & mask];
ar[a++] = ALPHABET[b2 & mask];
}
switch (size % 3)
{
case 1:
ar[--a] = '=';
case 2:
ar[--a] = '=';
}
return new String(ar);
}
/**
* Decodiert einen Base64-Codierte String in einen "normalen" String
*
* @param base64 Der Base64-Codierte String.
* @return Der Base64-decodierte String.
*/
public static String decode(String base64)
{
int delta = base64.endsWith("==") ? 2 : base64.endsWith("=") ? 1 : 0;
byte[] buffer = new byte[base64.length() * 3 / 4 - delta];
int mask = 0xFF;
int index = 0;
for (int i = 0; i < base64.length(); i += 4)
{
int c0 = toInt[base64.charAt(i)];
int c1 = toInt[base64.charAt(i + 1)];
buffer[index++] = (byte) (((c0 << 2) | (c1 >> 4)) & mask);
if (index >= buffer.length)
{
return new String(buffer);
}
int c2 = toInt[base64.charAt(i + 2)];
buffer[index++] = (byte) (((c1 << 4) | (c2 >> 2)) & mask);
if (index >= buffer.length)
{
return new String(buffer);
}
int c3 = toInt[base64.charAt(i + 3)];
buffer[index++] = (byte) (((c2 << 6) | c3) & mask);
}
return new String(buffer);
}
}
Titel | Forum | Antworten | Datum | |
---|---|---|---|---|
![]() |
JAXB generell auf XMLs übertragbar | XML & JSON | 22 |