All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.kapott.hbci.manager.MatrixCode Maven / Gradle / Ivy

There is a newer version: 4.0.0
Show newest version
/**********************************************************************
 *
 * Copyright (c) by Olaf Willuhn
 * All rights reserved
 *
 **********************************************************************/

package org.kapott.hbci.manager;

import org.kapott.hbci.comm.Comm;

/**
 * Klasse zum Parsen von Matrix-Codes.
 */
public class MatrixCode
{
    private String mimetype = null;
    private byte[] image = null;
    
    /**
     * ct.
     * @param data die Rohdaten aus dem HHDuc als String.
     * @throws Exception wenn die Daten nicht als Bild geparst werden konnten.
     */
    public MatrixCode(String data) throws Exception
    {
        this(data != null ? data.getBytes(Comm.ENCODING) : null);
    }
    
    /**
     * ct.
     * @param data die Rohdaten aus dem HHDuc als Byte-Array.
     * @throws Exception wenn die Daten nicht als Bild geparst werden konnten.
     */
    public MatrixCode(byte[] data) throws Exception
    {
        if (data == null || data.length < 100)
            throw new Exception("invalid matrix code");

        int offset = 0;
        // Mime-Type
        {
            byte[] b = new byte[2];
            System.arraycopy(data,offset,b,0,2);
            
            int len = Integer.parseInt(this.decode(b));
            b = new byte[len];
            offset += 2;
            
            System.arraycopy(data,offset,b,0,len);
            this.mimetype = new String(b,Comm.ENCODING);
            offset += len;
        }
        
        // Bild-Daten
        {
            // Die Groesse brauchen wir hier nicht ermitteln,
            // weil das Bild ja genau bis zum Ende des Byte-Array geht
            offset +=2;
            int len = data.length -  offset;
            byte[] b = new byte[len];
            
            System.arraycopy(data,offset,b,0,len);
            this.image = b;
        }
    }
    
    /**
     * Decodiert die Bytes als String.
     * @param bytes die Bytes.
     * @return der String.
     */
    private String decode(byte[] bytes)
    {
        StringBuilder sb = new StringBuilder();
        for (int i=0;i




© 2015 - 2024 Weber Informatics LLC | Privacy Policy