2016-04-11 1 views
0

Есть ли подход, который позволяет избежать копирования байта [] из ByteBuffer с помощью операции ByteBuffer.get().Переход от ByteBuffer к строке напрямую, но без промежуточного байта []?

Я смотрел на этот пост Java: Converting String to and from ByteBuffer and associated problems

и что приводит к посреднику CharBuffer, которые я не хочу, а.

Хотелось бы, чтобы он перешел от ByteBuffer к String.

Когда я знаю, что у меня есть байт [], лежащий в основе, это легко с кодом, как так

new String(data, offset, length, charSet); 

Я надеялся на что-то подобное с ByteBuffer. Я начинаю думать, что это может быть невозможно? Мне нужно декодировать N байтов моего ByteBuffer.

Это может быть немного преждевременная оптимизация, но я действительно просто любопытен и хотел проверить производительность и выжать каждый бит. (действительно личный проект).

спасибо, Дин

+2

Вы имеете в виду [ByteBuffer.array()] (https://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html#array%28%29)? – user3159253

ответ

2

Не действительно для прямого ByteBuffer, нет. У вас должно быть промежуточное что-то, потому что String не принимает ByteBuffer как аргумент конструктора, и вы не можете его обернуть (или даже char[]). Если буфер не является прямым, вы можете использовать метод array(), чтобы получить ссылку на массив поддержки (который не является промежуточным массивом) и создать из него String.

С другой стороны, в вашем проекте, вероятно, есть намного более чувствительные к производительности места.

+0

ну, я играю с библиотекой nio, и тестирование показывает, что копирование байтов будет дорогостоящим :(Поэтому я надеялся предотвратить более крупные экземпляры массива байтов и пойти прямо. Кажется, что они должны иметь эту функцию ... shucks. –

+0

, но да, в контексте полного стека приложений, это было бы минимально –

+0

Я могу себе представить, что могут возникнуть проблемы с созданием Java 'String' из практически неуправляемой (насколько это касается Java) памяти без копирования байтов между ними. – Kayaman

Смежные вопросы