MappedByteBuffer в растровое изображение?

У меня есть MappedByteBuffer, часть которого содержит байты файла PNG.

Я хочу вызвать: BitmapFactory.decodeByteArray (byte [] data, int offset, int length);

Должен ли я переместить часть MappedByteBuffer в byte[] или есть способ просто передать MappedByteBuffer?

Спасибо!


person Fra    schedule 28.10.2014    source источник


Ответы (1)


Невозможно вызвать несуществующий метод.

Единственный способ использовать данные из MappedByteBuffer — это скопировать данные в буфер byte[], а затем передать этот буфер упомянутому вами методу. Вероятно, через ByteBuffer#get(byte[] target).

person zapl    schedule 28.10.2014
comment
Да, это то, что я понял. Просто хотел убедиться, что не было другого более быстрого/менее ресурсоемкого способа для перемещения байтов PNG в объект Bitmap. - person Fra; 28.10.2014
comment
Возможно, есть лучшие подходы, для этого требуется полная копия данных изображения в памяти. MappedByteBuffer находится в файле, поэтому имя файла, файловый дескриптор или поток будут более эффективными. Например, когда данные изображения являются лишь частью файла, вы можете создать InputStream, охватывающий только эти части. Преимущество: не требуется, чтобы данные полностью находились в памяти. - person zapl; 28.10.2014
comment
Я думал об этом. Может поэкспериментировать. На данный момент я придерживаюсь этого подхода, так как считаю, что MappedByteBuffers намного быстрее. И независимо от того, какие средства я использую для анализа данных, я застрял, создавая байт [], равный размеру изображения... - person Fra; 28.10.2014
comment
хм, если у вас в любом случае есть сопоставленный буфер, это может быть самый быстрый подход, поскольку данные уже находятся в памяти / если не попадают туда очень быстро, потому что сопоставленные буферы должны выиграть от отсутствия переключателя пользовательского контекста ядра ( ibm.com/developerworks/library/j-zerocopy ). - person zapl; 29.10.2014