- PR -

バイナリファイルの読み取りについて

投稿者投稿内容
yamasa
ベテラン
会議室デビュー日: 2003/02/15
投稿数: 80
投稿日時: 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/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 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/08
投稿数: 317
お住まい・勤務地: お花畑
投稿日時: 2003-08-25 17:34
引用:

ほむらさんの書き込み (2003-08-25 16:50) より:
せっかくJAVAを用いているのだから個人的には
バイナリなんて環境依存のデータ形式は使用しないほうが都合が良いのでは?



でも浮動小数点数を扱う場合なんかはバイナリでやり取りした方が精度の面でよい
のではないかな〜と思うのですが。まぁJavaで浮動小数点数なんか使ったことがない
ので実際にどのようにやられているのかはわかりませんが ^^;
まりり
ぬし
会議室デビュー日: 2001/12/05
投稿数: 329
投稿日時: 2003-08-26 01:28
引用:

でも浮動小数点数を扱う場合なんかはバイナリでやり取りした方が精度の面でよい
のではないかな〜と思うのですが。


精度を問題にするんならそんなもの当てにしないでください・・・
仕様決めるときに精度の基準をはっきりさせておくべきで、そういう意味なら断然XMLだとかCSVだとかのテキストとすべきです。

バイナリを使ってシステム的に得をするのは効率の面です。
たーぞう
ぬし
会議室デビュー日: 2003/08/08
投稿数: 317
お住まい・勤務地: お花畑
投稿日時: 2003-08-26 14:21
わ〜いぬしさんからレスをもらっちゃった。
引用:

まりりさんの書き込み (2003-08-26 01:28) より:
精度を問題にするんならそんなもの当てにしないでください・・・
仕様決めるときに精度の基準をはっきりさせておくべきで、そういう意味なら断然XMLだとかCSVだとかのテキストとすべきです。


でもですね〜バイナリ形式で書き出し・読み込みを行うと、これは内部表現そのものなわけだから、精度の劣化は発生しないわけですね。当てにする理由は十分にあると思いますが。
びしばし
大ベテラン
会議室デビュー日: 2002/03/13
投稿数: 181
投稿日時: 2003-08-26 14:23
引用:

まりりさんの書き込み (2003-08-26 01:28) より:
引用:

でも浮動小数点数を扱う場合なんかはバイナリでやり取りした方が精度の面でよい
のではないかな〜と思うのですが。


精度を問題にするんならそんなもの当てにしないでください・・・
仕様決めるときに精度の基準をはっきりさせておくべきで、そういう意味なら断然XMLだとかCSVだとかのテキストとすべきです。

バイナリを使ってシステム的に得をするのは効率の面です。



ちょっと本題からはずれてきましたかね。

今ひとつおっしゃっていることがわかりませんが、浮動小数点数の内部表現形式はIEEEが定めた形式が(今のところ)広く(CもJavaも)使われているので、そのまま16進数などでやりとりすれば精度落ちの心配もないと思いますが...。
まりり
ぬし
会議室デビュー日: 2001/12/05
投稿数: 329
投稿日時: 2003-08-26 14:49
勘違いしておりました。
浮動小数点の内部表現はCでも処理系によらず規定されてるのですね。

XMLだのCSVだのを使えと言ったのは、処理系のマニュアルなどに
あたらなくても精度がはっきり明記できるでしょうという意図でした。

勘違いおよびわかりにくい発言で申し訳ないです。

スキルアップ/キャリアアップ(JOB@IT)