2009-12-16 2 views
2

Я имею в кодировке Base64 объект со следующим заголовком:Base64 декодирования в C# или Java

application/x-xfdl;content-encoding="asc-gzip" 

Каков наилучший способ продолжить в декодировании объекта? Нужно ли снимать первую строку? Кроме того, если я превращу его в массив байтов (byte []), как мне его отключить?

Спасибо!


Я думаю, что сперва заплатил. Говоря, что заголовок был

application/x-xfdl;content-encoding="asc-gzip" 

Я имел в виду, что это была первая строка файла. Итак, чтобы использовать библиотеки Java или C# для декодирования файла, нужно ли эту строку удалить?

Если да, то каким будет самый простой способ снять первую строку?

ответ

2

Мне удалось использовать следующий код для преобразования документа .xfdl в документ DOM Java.

Я использовал iHarder's Утилиту Base64, чтобы сделать Base64 Decode.

private static final String FILE_HEADER_BLOCK = 
     "application/vnd.xfdl;content-encoding=\"base64-gzip\""; 

    public static Document OpenXFDL(String inputFile) 
      throws IOException, 
       ParserConfigurationException, 
       SAXException 

    { 
     try{ 

      //create file object 
      File f = new File(inputFile); 
      if(!f.exists()) { 
       throw new IOException("Specified File could not be found!"); 
      } 

      //open file stream from file 
      FileInputStream fis = new FileInputStream(inputFile); 

      //Skip past the MIME header 
      fis.skip(FILE_HEADER_BLOCK.length()); 

      //Decompress from base 64     
      Base64.InputStream bis = new Base64.InputStream(fis, 
        Base64.DECODE); 

      //UnZIP the resulting stream 
      GZIPInputStream gis = new GZIPInputStream(bis); 

      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder db = dbf.newDocumentBuilder(); 
      Document doc = db.parse(gis); 

      gis.close(); 
      bis.close(); 
      fis.close(); 

      return doc; 
     } 
     catch (ParserConfigurationException pce) { 
      throw new ParserConfigurationException("Error parsing XFDL from file."); 
     } 
     catch (SAXException saxe) { 
      throw new SAXException("Error parsing XFDL into XML Document."); 
     } 
    } 

Работает над успешной модификацией и перекодировкой документа.

Надеюсь, это поможет.

+0

Красивыми - спасибо! – paulsm4

12

Чтобы декодировать содержимое Base64 на C#, вы можете использовать Convert Class static methods.

byte[] bytes = Convert.FromBase64String(base64Data); 

Вы также можете использовать GZipStream Class, чтобы помочь справиться с потоком с gzip'нутыми.

Другой вариант: SharpZipLib. Это позволит вам извлечь исходные данные из сжатых данных.

0

Для java, вы испробовали java в java.util.zip пакете? Кроме того, Apache Commons имеет библиотеку Commons Compress для работы с zip, tar и другими сжатыми типами файлов. Что касается декодирования Base 64, существует несколько библиотек с открытым исходным кодом, или вы можете использовать класс sun.misc.BASE64Decoder.

1

Это звучит, как вы имеете дело с данными, которые, как архивированная и Base 64 закодирован. Как только вы отключите заголовки mime, вы должны преобразовать данные Base64 в массив байтов, используя что-то вроде кодека Apache commons. Затем вы можете обернуть байт [] в объекте ByteArrayInputStream и передать его GZipInputStream, который позволит вам прочитать несжатые данные.

0

скопированный из другого места, для Base64 я связываюсь с Викискладом кодеком-1.6.jar:

public static String decode(String input) throws Exception { 
    byte[] bytes = Base64.decodeBase64(input); 
    BufferedReader in = new BufferedReader(new InputStreamReader(
      new GZIPInputStream(new ByteArrayInputStream(bytes)))); 
    StringBuffer buffer = new StringBuffer(); 
    char[] charBuffer = new char[1024]; 
    while(in.read(charBuffer) != -1) { 
     buffer.append(charBuffer); 
    } 
    return buffer.toString(); 
} 
Смежные вопросы