3

私は短い[512x512]配列をバイナリファイルに書き込む必要があり、エンディアンはほとんどありません。リトル エンディアンで短いファイルを1 つ書き込む方法を知っています。配列を1つずつ書き込んでループするよりも良い方法があると思います。

4

2 に答える 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 に答える