2012-06-26 12 views
1

У меня есть большой String, который был когда-то преобразуется в ByteBuffer & затем при чтении позже несколько раз, только часть String (обзора текста) должна быть представлена, так что я хотите преобразовать только часть ByteBuffer в String.Преобразовать часть ByteBuffer обратно в строку

Можно ли конвертировать только часть ByteBuffer в строку, а не [преобразования всей Bytebuffer в String & затем с помощью substring()]

+0

Вы не можете этого сделать, потому что некоторые символы занимают более одного байта. (Предполагая, что ваши байты кодируются UTF-8, платформа по умолчанию для Linux). Неужели это проблема производительности, чтобы превратить всю партию в «String»? – artbristol

+0

Я не профилировал свой код, но я просто хотел избежать декодирования всего BB _if possible_ –

ответ

2
try { 
    ByteBuffer bbuf = encoder.encode(CharBuffer.wrap(yourstr)); 
    bbuf.position(0); 
    bbuf.limit(200); 
    CharBuffer cbuf = decoder.decode(bbuf); 
    String s = cbuf.toString(); 
    System.out.println(s); 
} catch (CharacterCodingException e) { 
} 

Который должен возвращать символы из буфера байтов, начиная с 0. байта и оканчивающиеся на 200.

Или скорее:

ByteBuffer bbuf = ByteBuffer.wrap(yourstr.getBytes()); 
    bbuf.position(0); 
    bbuf.limit(200); 

    byte[] bytearr = new byte[bbuf.remaining()]; 
    bbuf.get(bytearr); 
    String s = new String(bytearr); 

Какой d oes то же, но без явного декодирования/кодирования символов.

Декодирование, конечно, происходит в конструкторе String s, и это зависит от платформы, поэтому следите.

+0

Я хочу получить первые 200 символов строки. Как мне это сделать? –

+0

Количество байтов для декодирования зависит от кодировки, поэтому я не думаю, что существует общее решение. Для UTF-8 вы можете декодировать первые 800 байт, а затем взять подстроку первых 200 символов результата. Это должно работать, потому что длина символа UTF-8 не превышает 4 байта. – Soulman

0
// convert all byteBuffer to string 
String fullByteBuffer = new String(byteBuffer.array()); 

// convert part of byteBuffer to string 
byte[] partOfByteBuffer = new byte[PART_LENGTH]; 
System.arraycopy(fullByteBuffer.array(), 0, partOfByteBuffer, 0, partOfByteBuffer.length); 
String partOfByteBufferString = new String(partOfByteBuffer.array()); 
Смежные вопросы