3

バイナリ データ (PDF など) を Oracle データベースの BLOB に入れたいと考えています。最初に、PDF を FileInputStream に入れ、バイト配列を作成しました。そのコードは次のとおりです。

public static byte[] createByteArray(File pCurrentFolder, String pNameOfBinaryFile)
    {

        String pathToBinaryData = pCurrentFolder.getAbsolutePath()+"/"+pNameOfBinaryFile;

        File file = new File(pathToBinaryData);
        if (!file.exists())
        {
            System.out.println(pNameOfBinaryFile+" could not be found in folder "+pCurrentFolder.getName());
            return null;
        }

        FileInputStream fin = null;
        try {
            fin = new FileInputStream(file);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        byte fileContent[] = new byte[(int) file.length()];

        try {
            fin.read(fileContent);
        } catch (IOException e) {
            e.printStackTrace();
        }

        return fileContent;
    }

これ (バイト配列) を MyBatis 経由でデータベースに送信したところ、うまく機能したため、BLOB に PDF があり、データベースから PDF を読み取ることもできました。しかし、今、私は次の問題に直面しています: 特定のデータベースに接続し、すべてのコンテンツを xml ファイルに保存する検索エンジン用の JDBC コネクタ (FAST ESP ... しかし、それは重要ではありません) があります。この xml ファイル内には、CDATA フィールド内にバイナリ データを含む「data」という要素があります。

この xml を解析したい場合、Java は次のように指示します。

The content of elements must consist of well-formed character data or markup.

一部の PDF では機能しますが、機能しないものもあります。問題は、それらを間違った方法でデータベースに保存したことだと思います。

詳細については、以前に尋ねた別の質問に敬意を表しますが、これはそれに似ています。

Java: 解析中に xml ファイルのバイナリ データをスキップする

そこの誰かが、PDF (または任意のバイナリ ファイル) を base64 でエンコードする必要があると言いました。つまり、PDF を FileInputStream に入れるだけでなく、byte[] を保存し、この byte[] をデータベースの BLOB に入れます。PDF をデータベース内に正しい方法で保存し、後で JDBC コネクタが作成する XML ファイルを正しく解析できるようにするには、どうすればよいですか?

4

2 に答える 2

2

JAXB DatatypeConverter クラスを使用して、外部依存関係なしでデータを base64 に簡単に変換できます。

byte[] arr = YOUR_BINARY_ARRAY;
String result = javax.xml.bind.DatatypeConverter.printBase64Binary(arr);

このコードをメソッドの最後に追加するだけで、戻り値の型を String に変更できます。

于 2012-07-31T15:58:42.547 に答える
0

次の例のように、最初に Apache Commons を使用してバイトを basse64 に変換することを試みることができます。

import org.apache.commons.codec.binary.Base64;

import java.util.Arrays;

public class Base64Encode {
    public static void main(String[] args) {
        String hello = "Hello World";


        byte[] encoded = Base64.encodeBase64(hello.getBytes());


        System.out.println(Arrays.toString(encoded));

        String encodedString = new String(encoded);
        System.out.println(hello + " = " + encodedString);
    }
}
于 2012-07-31T15:10:23.053 に答える