2017-02-23 43 views
0

Как преобразовать CharBuffer в ByteBuffer? Есть ли простой способ сделать это?Конвертировать CharBuffer в ByteBuffer

С другой стороны, можно получить CharBuffer от ByteBuffer по телефону ByteBuffer.asCharBuffer().

EDIT:

Самый простой способ, который я знаю, получаю ByteBuffer через Charset.encode(CharBuffer cb)

Но я надеялся, что там была более прямой путь, то есть просто получить основной массив байтов, используемый для хранения фактических символов , без какой-либо кодировки.

EDIT 2: Это просто произошло со мной, что CharBuffer хранит свои данные во внутреннем char[] и не byte[] поэтому нет основной byte[].

+0

Чтобы установить его прямо, он не создает «CharBuffer», он создает представление «CharBuffer» для оставшейся части «ByteBuffer». –

+0

Вы можете написать обратно в ByteBuffer через представление «CharBuffer». Интересно, если это дает вам то, что вы хотите? Возможно, вам стоит попытаться объяснить на более высоком уровне то, что вы пытаетесь получить, и почему вы задаете вопрос. –

+1

Это не мое домашнее поле, поэтому я мог бы ошибаться: 'ByteBuffer.wrap (yourCharBuffer.toString(). GetBytes())'? Вы можете опционально передать 'CharSet' или имя набора символов в' getBytes() 'для управления кодировкой символов. –

ответ

1

Вот предложение.

CharBuffer yourCharBuffer = CharBuffer.wrap("Roland"); 

    ByteBuffer result = ByteBuffer.allocate(20); 
    CharBuffer converter = result.asCharBuffer(); 
    converter.append(yourCharBuffer); 

    System.out.println(Arrays.toString(result.array())); 

фрагменте кода выше печатает:

[0, 82, 0, 111, 0, 108, 0, 97, 0, 110, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0] 

Я получаю массив байт, что является Simultaniously поддержав converterCharArray и resultByteArray. Это как можно ближе к вашим требованиям. Возможно, я что-то пропустил.

Вы заметили, что поскольку в этом случае массив байтов имеет больше места, чем необходимо для содержимого буфера, в конце он имеет дополнительные 0 байт.

Если код, который заполнил ваш оригинал CharBuffer, вместо этого можно было бы заполнить буфер с байтом CharBuffer, это может быть немного проще.

И у вас есть предложение, Charset.encode(CharBuffer), еще проще.

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