MIMEとバイナリデータの読み方

このQ&Aのポイント
  • バイナリファイル内には、MIMEのboundary1の後にXMLヘッダーの部分があります。このXMLヘッダーをパースする方法と、バイナリファイル内のMIME boundary2の後にあるバイナリデータを読む方法について教えてください。
  • バイナリファイル内には、XMLヘッダーの部分があります。このXMLヘッダーをパースする方法と、バイナリファイル内のバイナリデータを読む方法について教えてください。
  • バイナリファイル内のXMLヘッダーとバイナリデータを読み込む方法について教えてください。
回答を見る
  • ベストアンサー

MIMEとバイナリデータの読み方

バイナリファイルの中、MIME boundary1の後、ヘッダーの部分のXMLで書かれたテキストファイルあります。そのXMLヘッダー文をパースしたい。 バイナリファイルのほかのところにMIME boundary2の後バイナリ形式のデータあります。 Googleで調べたけど、なにかは見つかったけど、理解できず困っています。 バイナリファイルを一バイトづつ読んで、Integer.toHexString()を使うとASCIIの形でXMLの部分はそのまま (フォーマットなしで)、バイナリデータの分は化けた表示されます。 だいたいのアウトラインでよいです。やり方ご存知の方、教えてください。 (1)boundary1の後書かれたXML式データを読む方法 (2)boundary2の後、決まったキーワードが入っていたら、そこから決まったバイト数までのバイナリデータを読む方法 その決まったキーワードと決まったバイト数はヘッダーのXML内に書かれています。

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

MIME boundaryがあるのにバイナリファイルというのがよく分かりません。メールとかで使われるMIMEのmultipart形式はテキストなので、それとは違う何かなのでしょうが。 boundaryの部分も含めて、XMLパートとバイナリパートの初めのほうだけ具体例を示すことはできませんか? > バイナリファイルを一バイトづつ読んで、Integer.toHexString()を使うとASCIIの形でXMLの部分はそのまま (フォーマットなしで)、バイナリデータの分は化けた表示されます。 もしMIME multipartであれば、各パート毎にContent-TypeとかContent-Transfer-Encodingが指定されていると思うので、それに従って読み込んでください。 XMLの解析には、DOMとかSAXとかのXML parserを使ってください。

x201s-goo
質問者

補足

salsberryさん 業務の都合で具体例は申し訳ありませんが、ご指摘の通り、テキストファイルです。 ファイル内組み込まれたバイナリデータとファイルタイプを感違えました。(汗) そのテキストファイルの中で、 --MIME_boundary-1 Content-Type: text/xml; charset="UTF-8" Content-Transfer-Encoding: 8bit 直後 (1)XML式でヘッダー情報 --MIME_boundary-2 Content-Type: application/octet-stream Content-Location: XXX.bin 直後 (2)バイナリデータ のかたちです。 疑問・質問:--MIME_boundary-2のところ、Content-Transfer-Encodingの指定がなく、 代わりにContent-Location: XXX.binがあります。「.bin」でバイナリを示していると思います。 >もしMIME multipartであれば、各パート毎にContent-Typeとか >Content-Transfer-Encodingが指定されていると思うので、 >それに従って読み込んでください。 >XMLの解析には、DOMとかSAXとかのXML parserを使ってください。 そうです。MIME multipartです。 だいぶ見えてきました。ありがとうございます。 この情報わかった上でググってみます。 もう一度、ありがとうございます。

関連するQ&A

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

  • バイナリ読み込み時のデータ受け渡しについて

    質問させていただきます。 XMLファイルを圧縮後にバイナリ読み込みし、long*に設定してそれを4バイトのlong配列に格納したいと考えています。 ファイルを読み込む際にはデータ数が解らないので、ループを回したいと思っています。 以下に一部記載します。 これでpBinaryには正常にバイナリデータが入るのでしょうか? わかる方がいれば教えてください。 ****************************************** FILE *pFile = NULL; pFile = fopen("XMLFile.xml", "rb"); int iRet = 0; int iSize = 0; bool bRet = false; long *pBinary = new long; while(bRet != true) { /* 4バイトずつ読み込みpBinaryに設定する */ fread(pBinary, sizeof(4), 1, pFile); if(iRet != 1) { bRet = true; } else { iSize++; } }

  • DOSで、ASCIIデータをバイナリコピーにて結合するとゴミがはいる?

    DOSで、2つのASCIIデータをバイナリコピー(COPY /b)すると1バイトのゴミが入る場合があるのですが、なぜこのようになるのでしょうか? しかし、必ずゴミが入るわけではないようにも思います。 →たまたま入る時がある? →ASCIIデータの形によって、入る時がある? バイナリコピーしない場合(COPY)は混在することは無いように思います。 昔、ASCIIデータは、バイナリコピーしない方が無難と聞いたことがある気もするのですが、昔過ぎて理由等忘れてしまいました。 詳しい方いらっしゃいましたらお教えいただけると助かります。

  • matlabデータをバイナリデータで書き出す方法

    matlabデータをバイナリデータで書き出す方法を教えてください。 matlabで心電図波形を記録したのですが、RR間隔を出すプログラムを組むことが出来ませんでした。 そこで、先生が作られたRR間隔を出すプログラムがLabVIEWにあるので、matlabデータをLabVIEWにくわせてRR間隔を出したいと考えています。 LabVIEWにくわすには、matlabデータをヘッダ1024バイト、データは4バイトの単精度浮動小数点にしなければいけません。 matlabで任意のヘッダを付けたバイナリデータを生成する方法を教えてください。

  • バイナリデータの取り方

    VB6を使用して、バイナリファイルをバイナリデータとして文字列にとりたいのですが、全角文字が絡んだ時の処理がうまくいきません。 バイナリファイルをString型の変数に丸ごと読み込んで、後は何バイトから何バイト目を抜き取り数値に変換…という処理をしようとしています。 本来は、バイナリでファイルをオープンして、Getコマンドで取得するのが手っ取り早いのですが、ファイルアクセス回数を減らすため、このような面倒な方法をとっております。 そこで仮に、 dim test as string dim i as integer test = "aあ" & chr(1) & "0 " For i = 1 to 6 Debug.Print Asc(Strconv( _ MidB(Strconv(test,vbFromUnicode),i,1), _ vbUnicode)) Next のようなソースを作ってみました。(本来は文字列は数100KByte…) しかしながら、この方法ですと上の例では2Byte目、つまり「あ」の文字の1Byte目が「&H00」になってしまいます。その次は「&HA0」、他の箇所も問題ないのですが… おそらくは根本的に違う方法で解決すべきではないかと思うのですがその方法がわかりません。 なお、この格納データはバイナリデータなので、意図的に全角文字にしていくてもその値によって(偶然)全角文字になったり制御文字になったりしますので前もって全角文字に対する処理は難しいと考えてます。 質問の仕方が良くなく、質問の内容がなかなかご理解いただけないとは思いますが、ご存知の方、ご経験者の方、ご教授お願いいたします。

  • テキストファイルのデータからバイナリを作りたい

    現在、テキストデータとしてCSVファイル1つあたり8バイトのデータが1000個ほどのデータが書かれているファイルがあります。このデータをバイナリファイルへ数値も変換して行きたいと思っています。 たとえば1個目のデータ”12345678”というテキストデータをバイナリの"12345678"に変換したらそれを0x00番地に並べて、そして2個目のデータ”87654321”というデータをバイナリにしたらそれを0x90離れた場所に置いていき、それを1000回繰り返して、結果をバイナリファイルで出力したいのですが、何か簡単にできるフリーソフトなどありませんでしょうか? また、プログラムとかでも簡単にできるのならそうしたいのですが、どうしたらよいか教えていただけないでしょうか?

  • C++でバイナリデータの扱い方

    以下のプログラムで接続先からバイナリデータを取得しているのですが coutで出力しても画面に何も表示されません。 ------------------------------------------------------ /*include部分は省きます*/ std::string bin; //1 clx::http session(clx::uri::encode(ip), 80); //2 session.get(clx::uri::encode(param)); //3 bin = session.body(); //4 std::cout << bin << std::endl; //5 ------------------------------------------------------ 上記プログラムを空ファイルにリダイレクトしバイナリエディタで見たら ちゃんとデータは書き込まれていました。 5行目を以下のように変えても空欄が出力されただけで文字は表示されませんでした std::cout << std::hex << bin << std::endl; しかし以下のようにすると文字数は表示されました。 std::cout << bin.length() << std::endl; やりたいこととしてはphpのpack()、unpack()的な部分です。 例えば 値をフォーマットを指定してバイナリデータとして出力 $val=pack("L", 35); とか バイナリデータを変数から指定バイト分取り出して10進数で画面に出力 $bin=(バイナリデータ); $val=unpack("c",$bin); echo(sprintf("%d",$val)); です。 バイナリの扱いはリトルエンディアンです。 ご教示お願いしますm(__)m

  • VBAを使って、一部バイナリデータを読み書き

    VBAを使って、一部バイナリデータを読み書きする方法 を教えてください。 あるファイルが1行目から30行目までが普通のASCII形式でデータが書き込まれており、 31行目以降はバイナリデータとなっています。 また、30行目にheader endと書かれています。 このデータを30行目までは文字列データとして抽出し、 31行目以降はバイナリデータとして抽出して、 少し内容を書き換えてから、最初と同様に 30行目までをASCII、31行目以降をバイナリデータとして出力したいのですが どのようにすれば良いですか? http://homepage2.nifty.com/kasayan/vba/binary.htm http://hanatyan.sakura.ne.jp/vbhlp/Binary.htm バイナリデータの読み込み方は上記のページに書かれてあるのですが いずれも、ファイルをまるごとバイナリ形式として読み込むもので 一部だけバイナリとして読み込むことはできないようです。 どなたかどうすれば良いか教えてください。

  • バイナリデータの書き方が分かりません・・。

    シリアルポートでバイナリデータを送信したいのですが、バイナリをどう書けがいいのか分りません。 送りたいコードは16進数で02 00 02 00です。 以下のソースの"123"の部分を書き換えるのだと思うのですが、どう書けば良いのでしょうか? よろしくお願いします。 char* wbuf; DWORD wbyte; lstrcpy(wbuf,"123"); WriteFile(hCom,wbuf,lstrlen(wbuf),&wbyte,&old

  • バイナリデータについて

    バイナリデータについて 先日関連した質問をさせていただいただのですが、 質問内容があやふやでしたのであらためて 今回POS連携システムにてPOSへ渡すデータを固定長バイナリ型式で作成いたします。 JAVAにてデータ作成を行うのですが、その作成方法がよくわかりません。 例えば次の6項目があるとして 元のデータ[0001] → 属性[K] 長さ[2Byte] 元のデータ[20100901] → 属性[K] 長さ[4Byte] 元のデータ[1234567890123456ffff] → 属性[K] 長さ[10Byte] 元のデータ[000100] → 属性[P] 長さ[3Byte] 元のデータ[0000001c] → 属性[P] 長さ[4Byte] 元のデータ[01] → 属性[B] 長さ[1Byte] 元のデータから各属性への変換、ファイル出力がイメージがわきません。 属性のK,P,Bというのもよくわかりません。 どなたかヒントでもいただけたら幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • Java

専門家に質問してみよう