LittleEndianバイトオーダー対応の入力ストリーム・Javaの小技、サンプル、ニュースなどを紹介していきます。みんなで参考にしてください。

Ads by Google


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

LittleEndianバイトオーダー対応の入力ストリーム


JavaはBigEndianですが、まれにLittleEndianのファイルを入出力しなければならない場合があります。
Javaはバイト操作関係が非常にやりづらいと思うのは私だけでしょうか?
LittleEndianの入力ストリームは以下を参考にしてください。
intの場合だけしか書いてありません。ここまで書けばshortやdoubleも大丈夫ですよね。


public class LittleEndianDataInputStream extends DataInputStream {

/**
* コンストラクタ
*
* @param in 入力ストリーム
**/
public LittleEndianDataInputStream (InputStream in) {
super(in);
}

/**
* Integerの読み込み
*/
public int readRevInt() throws IOException {
int ch1 = in.read();
int ch2 = in.read();
int ch3 = in.read();
int ch4 = in.read();

return ((ch4 << 24) + (ch3 << 16) + (ch2 << 8) + (ch1 << 0));
}

/**
* unsigned int の読み込み
*/
public long readRevUInt() throws IOException {
int ch1 = in.read();
int ch2 = in.read();
int ch3 = in.read();
int ch4 = in.read();

int i = ((ch4 << 24) + (ch3 << 16) + (ch2 << 8) + (ch1 << 0));
return (long)(0xffffffff & i);
}
}