Я работаю с некоторым кодом, который у меня нет, и ByteBuffer, с которым я работаю, получает переданный метод native. У меня нет доступа к собственному коду, но он ожидает, что «buf» будет ByteBuffer. Также обратите внимание, что код на самом деле не имеет смысла, но есть много, поэтому я перенаправляю его на проблему.Помещение ByteBuffer в Bundle
public class otherClass {
public final void setParams(Bundle params) {
final String key = params.keySet()[0];
Object buf = params.get(key));
nativeSet(key, buf);
}
private native final void nativeSet(key, buf);
}
Вот мой код:
public void myMethod(ByteBuffer myBuffer) {
final Bundle myBundle = new Bundle();
myBundle.putByteBuffer("param", myBuffer);
otherClass.setParams(runTimeParam);
}
Проблема? В Bundle нет метода putByteBuffer. Кажется странным, что есть get(), который возвращает объект, но не имеет общего put().
Но мне кажется странным, что нативный код требует ByteBuffer. Когда он будет передан с уровня Java, не будет ли у него куча метаданных? Может ли код на собственном уровне предсказать метаданные и извлечь из ByteBuffer?
Есть ли способ надежно передать ByteBuffer здесь? Это может быть немного взломанным. Я думал, может быть, я мог бы выяснить, какой объект ByteBuffer будет в битах, преобразовать в целое и использовать putInt(). Не уверен, как перейти от объекта ByteBuffer к необработанным данным.