Предположим, что у меня есть метод void foo(byte[] bytes)
, поэтому в качестве его параметра требуется массив байтов. Howerver, тип Java для байтовых массивов в Protobuf - ByteString
.Буферы протоколов: получить массив байтов из ByteString без копирования
Я могу использовать byte[] toByteArray()
, чтобы получить массив байтов. Но проблема заключается в том, что этот метод создает новый массив с использованием копии, что относительно дорого. Я бы предпочел, чтобы он возвращал базовый массив напрямую или вместо этого возвращал представление.
Есть ли какой-либо API для этого, или штраф за исполнение допустим?
Что делает метод foo (byte [] bytes)? Можете ли вы изменить его реализацию? – kostya
@kostya Вы имеете в виду, что я могу использовать 'ByteString # writeTo (OutputStream)' вместо этого? Но я действительно хочу, чтобы мои модули были отделены друг от друга. – duleshi
Да, что-то вроде 'writeTo'. 'OutputStream' - это класс из стандартной библиотеки, поэтому вы все равно можете сохранить foo() метод protobuf бесплатно. Javadocs для 'ByteString' четко заявляют, что то, что вы просите, невозможно: как и' String', содержимое «ByteString» никогда не может измениться, даже при наличии гонки данных или неправильного использования API в клиентском коде , – kostya