アプリ版:「スタンプのみでお礼する」機能のリリースについて

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扱い経験ある方々、教えてください。
とりあえず、キーワード見つかって、ネットで見つかったら読んで、理解できるのかみてみたいです。

よろしくお願いします。

A 回答 (1件)

そのマルチパートメッセージがHTTPリクエストボディなのであればApache Commons FileUploadを使えばいいと思う。


ライセンスはもちろんApache License 2.0。

そのマルチパートメッセージが電子メールなのであればJavaMailを使えばいい。
http://www.oracle.com/technetwork/java/javamail/ …
ライセンスは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を使うのが吉だろう。
    • good
    • 0
この回答へのお礼

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処理で一バイト筒読むのはだめです。ですのでパーサーを使いたいです。
困っています。

よろしくお願いします。

お礼日時:2013/09/11 17:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!