私は短い[512x512]配列をバイナリファイルに書き込む必要があり、エンディアンはほとんどありません。リトル エンディアンで短いファイルを1 つ書き込む方法を知っています。配列を1つずつ書き込んでループするよりも良い方法があると思います。
質問する
4720 次
2 に答える
8
ややこのように:
short[] payload = {1,2,3,4,5,6,7,8,9,0};
ByteBuffer myByteBuffer = ByteBuffer.allocate(20);
myByteBuffer.order(ByteOrder.LITTLE_ENDIAN);
ShortBuffer myShortBuffer = myByteBuffer.asShortBuffer();
myShortBuffer.put(payload);
FileChannel out = new FileOutputStream("sample.bin").getChannel();
out.write(myByteBuffer);
out.close();
そして、それを元に戻すには、次のようにします。
ByteBuffer myByteBuffer = ByteBuffer.allocate(20);
myByteBuffer.order(ByteOrder.LITTLE_ENDIAN);
FileChannel in = new FileInputStream("sample.bin").getChannel();
in.read(myByteBuffer);
myByteBuffer.flip();
in.close(); // do not forget to close the channel
ShortBuffer myShortBuffer = myByteBuffer.asShortBuffer();
myShortBuffer.get(payload);
System.out.println(Arrays.toString(payload));
于 2012-05-08T21:09:04.723 に答える
3
これを本当に高速にする必要がある場合、最善の解決策は、ショーツをByteBuffer
リトル エンディアンのバイト オーダーにすることです。次に、. を使用して 1 回の操作で ByteBuffer を書き込みFileChannel
ます。
ByteBuffer
メソッドで のバイトオーダーを設定し.order()
ます。
于 2012-05-08T20:45:39.970 に答える