2

それを行うための最良の方法は何ですか?

私は次のことを試しました:

ByteBuffer cacheBuffer=ByteBuffer.allocateDirect(nm(nLimit,0));  //where nm(nLimit,0) is a large number
double[] cache=cacheBuffer.asDoubleBuffer().array();

しかし、私はこの例外を受け取りました:

java.lang.UnsupportedOperationException
at java.nio.DoubleBuffer.array(Unknown Source)

なんで?

編集:

javadocは「このバッファをバックアップするdouble配列を返します(オプションの操作)」のように見えます。実際には、array()メソッドが、このバッファをすでにバックアップしているdouble配列を返すだけであることを意味します。どういうわけかバッファをdouble[]に変換しようと思っていました。だから今、私は例外を得たのは理にかなっています。

4

3 に答える 3

6

これは、配列が単なるコピーであると予想される場合にのみ機能します。

final DoubleBuffer buffer = cacheBuffer.asDoubleBuffer();
final double[] copy = new double[buffer.remaining()];
buffer.get(copy);

あなたの試みが失敗する理由は、が非直接バッファarrayに対してのみサポートされているためです。ダイレクト バッファは配列によってサポートされません。

于 2012-09-01T13:32:19.180 に答える
1

array() は、Buffers のオプションの操作です。バッファの実装は、この操作をサポートする場合とサポートしない場合があります。hasArray() を呼び出して、操作がサポートされているかどうかを確認し、それに応じて続行します。

于 2012-09-01T13:49:27.013 に答える
-2

浅いコピーが必要な場合は、 clone() を使用します

于 2012-09-01T13:37:35.653 に答える