2015-06-11 8 views
0

Я работаю с некоторым кодом, который у меня нет, и 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 к необработанным данным.

ответ

0

Гипотетически это должно работать. Включите буфер байт в строку и передать в вашу пачку, как это:

byte[] bytes = myBuffer.getBytes(Charset.forName("UTF-8")); 
String byteString = new String(bytes, Charset.forName("UTF-8")); 
myBundle.putString("param", byteString); 

затем восстановить ByteBuffer из строки:

byte[] byteArray = byteString.getBytes(); 
ByteBuffer byteBuffer = ByteBuffer.allocate(byteArray.length + 8); 
byteBuffer.put(byteArray); 
Смежные вопросы