Visual C ++のReadInt16()と同じ関数を持つJavaのメソッドはありますか?数値データが16ビット形式で保存されているバイナリファイルを読み取る必要があります。
5 に答える
java.io.InputStream から読み込んでいる場合は、おそらく次のようなものが必要です。
DataInputStream dataInputStream = new DataInputStream(inputStream);
short myInt16 = dataInputStream.readShort();
いいえ、Javaのintは32ビットに固定されています。ただし、shortは16ビットです。多分あなたはそれを使うことができます。
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
あなたはあなたの側でいくつかの仕事をしなければならないように聞こえます。
RandomAccessR
のreadInt16()メソッドを試すことができます。
特に c/c++ を使用している場合は、バイナリ数値データの読み取りに使用ByteBuffer
することをお勧めします。これは、Java のデフォルトのバイト順がビッグ エンディアンであるのに対し、c/c++ ではリトルエンディアンであるためです。
byte[] bin_data = {0x01, 0x02, 0x03, 0x04};
ByteBuffer bb = ByteBuffer.wrap (bin_data);
bb.order (ByteOrder.LITTLE_ENDIAN);
System.out.println (String.format("0x%04X", bb.getShort ()); // 0x0201
System.out.println (String.format("0x%04X", bb.getShort ()); // 0x0403
Java はデフォルトでビッグエンディアンを使用することに注意してください。多くの MS ベースのシステムはリトル エンディアンを使用するため、代わりに ByteBuffer を使用することをお勧めします。
2 GB 未満のファイルに対してこれを行う簡単な方法は、ファイルをメモリ マップし、order(ByteOrder.LITTLE_ENDIAN) を使用することです。また、position(pos) を使用してこのファイルにランダムにアクセスすることもできます。