- - PR -
バイナリファイルの読み取りについて
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-08-25 14:25
>まさひろさん
endian あるいは byte order と呼ばれる類の問題です。 ここらあたりの解説を読んでみてください。 http://yougo.ascii24.com/gh/00/000012.html まさひろさんが処理しようとしているデータは、おそらく little endian で記録されているのでしょう。 ちなみに、2003-08-21 13:35の私の書き込みに補足すると、 java.nio.ByteBuffer はデフォルトでは big endian で 読み書きしようとするので、little endian で処理するには あらかじめ buffer.order(ByteOrder.LITTLE_ENDIAN) としておく 必要があります。 # 以下余談 > maruさん 「インディアン」と書くと indian と紛らわしいので 「エンディアン」のほうがよろしいのでは… [ メッセージ編集済み 編集者: yamasa 編集日時 2003-08-25 14:54 ] | ||||||||
|
投稿日時: 2003-08-25 16:50
ども、ほむら@JAVA勉強一週間目が過ぎた^^;;; です。
#質問内容の答えになってないゴミレスです。 #別に読み飛ばしてもらって結構です。 --------------------------------- せっかくJAVAを用いているのだから個人的には バイナリなんて環境依存のデータ形式は使用しないほうが都合が良いのでは? もし、簡単に読み取れるのが都合悪いのなら MD5など暗号化してしまっても良いわけですし。 (バイナリに比べるとサイズは1.5〜2倍程度にはなってしまうかもしれませんが) というわけで。。。こんな代替案はいかが? 1.C言語でバイナリ出力 2.C言語のツールで バイナリからXML文書へ変換 3.JAVAでXML文書の読み込み 構造体の存在しない(と思われる)JAVAだと バイナリは手間がかかるだけじゃないかな〜と思っても見たりして^^;;;; 追伸: リトルエンディアンとビックエンディアンだと、 たしか、構造体そのものの保存順序も反対になった気がする。。。。 #追伸を追加 [ メッセージ編集済み 編集者: ほむら 編集日時 2003-08-25 17:05 ] | ||||||||
|
投稿日時: 2003-08-25 17:34
でも浮動小数点数を扱う場合なんかはバイナリでやり取りした方が精度の面でよい のではないかな〜と思うのですが。まぁJavaで浮動小数点数なんか使ったことがない ので実際にどのようにやられているのかはわかりませんが ^^; | ||||||||
|
投稿日時: 2003-08-26 01:28
精度を問題にするんならそんなもの当てにしないでください・・・ 仕様決めるときに精度の基準をはっきりさせておくべきで、そういう意味なら断然XMLだとかCSVだとかのテキストとすべきです。 バイナリを使ってシステム的に得をするのは効率の面です。 | ||||||||
|
投稿日時: 2003-08-26 14:21
わ〜いぬしさんからレスをもらっちゃった。
でもですね〜バイナリ形式で書き出し・読み込みを行うと、これは内部表現そのものなわけだから、精度の劣化は発生しないわけですね。当てにする理由は十分にあると思いますが。 | ||||||||
|
投稿日時: 2003-08-26 14:23
ちょっと本題からはずれてきましたかね。 今ひとつおっしゃっていることがわかりませんが、浮動小数点数の内部表現形式はIEEEが定めた形式が(今のところ)広く(CもJavaも)使われているので、そのまま16進数などでやりとりすれば精度落ちの心配もないと思いますが...。 | ||||||||
|
投稿日時: 2003-08-26 14:49
勘違いしておりました。
浮動小数点の内部表現はCでも処理系によらず規定されてるのですね。 XMLだのCSVだのを使えと言ったのは、処理系のマニュアルなどに あたらなくても精度がはっきり明記できるでしょうという意図でした。 勘違いおよびわかりにくい発言で申し訳ないです。 | ||||||||
