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); } }
|