Java言語に関する質問です。
ByteBufferの読み書きについて知りたいです。
Node.jsでは
javascript
1buffer.readUInt8(offset); 2buffer.writeUInt32LE(value, offset);
のようなかんじで扱えますが、同様のことをJavaでする場合はどのように記述すればいいのでしょうか?
java
1//write 2byte[] bytes = new byte[5]; 3bytes[0] = (byte) 1; 4bytes[1] = (byte) 2; 5ByteBuffer buffer = ByteBuffer.wrap(bytes);
ByteBufferの書きを自力でやろうとしましたが、これくらいしか思いつきませんでした。
もっと簡単に扱える方法があれば教えてほしいです。
「同様のこと」が出来ていないので、何が分からないのか分かりません。「簡単に」の指す意味が分からないということです。
javaはprimitiveに符号なしがないので、ByteBufferオブジェクトのorderを変えながらoffsetをpositionメソッドで指定してget/putしつつ、primitiveのラップオブジェクトのtoUnsigned~メソッドで符号拡張する形になると思います。
説明不足ですみません。載せたJavaコードはwriteUInt8でバッファーに書き込むのと同じようなことができたけど、本当はJavaにもwriteUInt8と同じようなメソッド(?)があってこんな手間なことをしなくてもいいのでは?と疑問に思ったやつです。
同様のことというのはreadUInt8などと同じことをするにはどういう記述をすればいいのか?ということです。
簡単な方法が分からないのではなく、ByteBufferの使い方が分からないということですね。
上に書いたとおりですが、実装にするとこんな感じです(やってることは違うので、参考にして「同様なこと」をやってみてください)。
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
public class ByteBufferSample {
public static void main(String[] args) {
byte[] bytes = new byte[4];
bytes[0] = (byte) 255;
bytes[1] = (byte) 254;
ByteBuffer buffer = ByteBuffer.wrap(bytes);
System.out.println(buffer.order());
int value = Short.toUnsignedInt(buffer.getShort());
System.out.println(value);
buffer.order(ByteOrder.LITTLE_ENDIAN);
int offset = 0;
buffer.position(offset);
buffer.putInt(0x80000000 + value);
for(byte b : bytes) {
System.out.println(Byte.toUnsignedInt(b));
}
}
}
お返事が遅くなってしまい申し訳ございません。
実装例を書いていただいてありがとうございます。
動作を確認しながら試行錯誤してみたいと思います。
了解です。頑張ってください。
あなたの回答
tips
プレビュー