Javaのバイトオーダーについて質問です。


1.Javaではデータをビッグエンディアンで格納していますが、Javaで書いたアプリをPentiumのようなリトルエンディアン環境で動作させる際には、VMが自動的にリトルエンディアンに変換して動作させているのでしょうか?

2.もしVMがバイトオーダーを吸収しているとしたとき、にもかかわらずなぜhtons()やhtonl()などプログラマが明示的にバイトオーダーを意識しないといけないのでしょうか?

回答の条件
  • 1人5回まで
  • 登録:2007/04/15 06:23:20
  • 終了:2007/04/15 14:33:46

ベストアンサー

id:wnagata No.2

wnagata回答回数170ベストアンサー獲得回数182007/04/15 14:21:04

ポイント40pt

1.

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/nio/...

を読むと、Javaではバイナリデータを読み込むと自動的にビッグエンディアンに変換し、書き込むときにはプラットフォームごとのエンディアンで出力しています。その際、VMごとにデフォルトの動作が決められています。そのため、Intel系のリトルエンディアンのマシンでは、VMへの入力時にビッグエンディアンへの変換が、出力時にリトルエンディアンへの変換が行われています。なお、ネットワーク経由でデータを送受信する場合は、必ずビッグエンディアンで行われるので、変換は不要です。

2.

htons()やhtonl()はC言語の関数ですから、Javaとは直接関係はありません。Javaでは通常、バイトオーダーを意識する必要はありませんが、画像のexif情報を解析するときなどは、ファイルのヘッダーを読みこんで、ボディのバイトオーダーを判定して、その後の処理を切り替えなければいけませんので、自分でエンディアンの変換を行う必要があります。そのためのメソッドがjava.nioパッケージのクラスには用意されています。

id:tono5652

丁寧に解説していただき感謝します。

ちょうど次の疑問として java.nio パッケージの使いどころが浮かんでいたので、同時に解決していただきありがとうございます。

2007/04/15 14:32:53

その他の回答(1件)

id:yusukey No.1

yusukey回答回数73ベストアンサー獲得回数22007/04/15 12:44:26

ポイント30pt

1. はい。そうです。

2. htons() や htonl() は C の関数ではないでしょうか?

Java のプログラム内でエンディアンを意識することはないと思います。

http://www.jguru.com/faq/view.jsp?EID=25977

id:tono5652

>htons() や htonl() は C の関数ではないでしょうか?

今確かめてみたらどうやらそのようですね。ありがとうございます。

2007/04/15 14:21:53
id:wnagata No.2

wnagata回答回数170ベストアンサー獲得回数182007/04/15 14:21:04ここでベストアンサー

ポイント40pt

1.

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/nio/...

を読むと、Javaではバイナリデータを読み込むと自動的にビッグエンディアンに変換し、書き込むときにはプラットフォームごとのエンディアンで出力しています。その際、VMごとにデフォルトの動作が決められています。そのため、Intel系のリトルエンディアンのマシンでは、VMへの入力時にビッグエンディアンへの変換が、出力時にリトルエンディアンへの変換が行われています。なお、ネットワーク経由でデータを送受信する場合は、必ずビッグエンディアンで行われるので、変換は不要です。

2.

htons()やhtonl()はC言語の関数ですから、Javaとは直接関係はありません。Javaでは通常、バイトオーダーを意識する必要はありませんが、画像のexif情報を解析するときなどは、ファイルのヘッダーを読みこんで、ボディのバイトオーダーを判定して、その後の処理を切り替えなければいけませんので、自分でエンディアンの変換を行う必要があります。そのためのメソッドがjava.nioパッケージのクラスには用意されています。

id:tono5652

丁寧に解説していただき感謝します。

ちょうど次の疑問として java.nio パッケージの使いどころが浮かんでいたので、同時に解決していただきありがとうございます。

2007/04/15 14:32:53

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません