- 締切済み
multipart/MIMEパーサ-
multipart/MIMEのパーサー探しています。 探し方よくないか、理解できないか、どうも混乱しています。 読みたいファイルのヘッダー情報格納されている部分はContent-Type: text/xml;UTF-8式になっていて、IEEE754/float式で格納されている部分(バイナリ部分)はContent-Type: application/octet-streamになっています。 バイナリデータとヘッダー情報の間、--MIME_boundary-2などで区別されています。 上記なようなファイルをJavaでどうやって読むのでしょうか? DataInputStream使って一つバイトづつ読んで又いろいろString処理してやろうと思ってたのですが、非常に時間かかって(それでもまだ成功していないですが)ものにならない。 既存のパーサーあるはずとの思い強い。 以前、ここで少し教えてもらったことありますが、ググってもどのクラスを使うのか分かりません。 Java標準にはそのようなライブラリーはなさそうですが。。 ググって見つかったのはIBM/Lotus ソフトウェアのMIME Entity クラス。これって、「proprietary」ではないかな。もちろんjavaみたいなフリーライブラリーがほしいんです。 もう一つ見つかったのはmime4j.使い方今から調べます。 multipart/MIME扱い経験ある方々、教えてください。 とりあえず、キーワード見つかって、ネットで見つかったら読んで、理解できるのかみてみたいです。 よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- anmochi
- ベストアンサー率65% (1332/2045)
そのマルチパートメッセージがHTTPリクエストボディなのであればApache Commons FileUploadを使えばいいと思う。 ライセンスはもちろんApache License 2.0。 そのマルチパートメッセージが電子メールなのであればJavaMailを使えばいい。 http://www.oracle.com/technetwork/java/javamail/index.html ライセンスはJavaMail 1.4はthe Oracle Binary Code License Agreement for Java EE Technologies。プロプラなライセンスなんだけど、JavaMailに関してはロイヤリティーフリーであるとOracle社が明言している。ソースコードの提供は無い。 JavaMail 1.5はCDDL v1.1 and GPL v2 with Classpath Exceptionだ。 JavaMailは本来SMTPでメールを送信したりPOP3やIMAP4でメールを受信したりする時に使うJava標準拡張パッケージライブラリなんだけど、マルチパート電子メールの作成・解析の機能も持っているのでそこだけ使えばいい。 CDDL v1.1 and GPL v2 with Classpath ExceptionはCDDLとして使用すればあなたが開発した部分のソースコードは公開しなくて良いはずだが、ライセンス問題に敏感である場合はJavaMail 1.4.7を使うのが吉だろう。
お礼
anmochiさん コメントありがとうございます。 問題はこの読み取りしたいファイルはHTTPリクエストボディも電子メールもないです。 ある機械が出力した膨大なデータ(グラフで見ると10~11桁の数値です。)が格納されているファイルです。データの説明のため、XML式でヘッダー情報もあります。 以下、ファイルを簡単化したサンプルです。 //------------------------- MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="MIME_boundary-1"; type="text/xml"; Content-Description: 何か説明文 --MIME_boundary-1 Content-Type: text/xml; charset="UTF-8" Content-Transfer-Encoding: 8bit Content-Location: dataHeader.xml <?xml version="1.0" encoding="UTF-8"?> <Header> dataSize =123456 </Header> --MIME_boundary-2 Content-Type: application/octet-stream Content-Location: data.bin XXXXXXXXXX ここに上記dataSize分のバイナリ(float)データあります --MIME_boundary-2 このような場合ですが、「data.bin」以下、次の境目(boundary)見つかるまで(つまり、dataSize分)のデータを読み、配列等に保存したいです。 非常に大きいデータ量ですのでstring処理で一バイト筒読むのはだめです。ですのでパーサーを使いたいです。 困っています。 よろしくお願いします。