2012-06-26 3 views
1

에 나중에 여러 번 읽는 동안 한 번 다음 ByteBuffer &로 변환 된 큰 String이의 ByteBuffer의 일부를 변환, 그래서 ByteBuffer의 일부만 String으로 변환하고 싶습니다. 다시는 <code>String</code> (텍스트의 개요)의 일부만 제시 될 필요가 문자열

것이 가능 스트링의 ByteBuffer 일부만 변환보다는 0 바이트에서 시작하는 바이트 버퍼로부터 문자를 복귀해야하는

+0

일부 문자는 하나 이상의 바이트를 차지하므로 실제로는이 작업을 수행 할 수 없습니다. (바이트가 UTF-8로 인코딩되었다고 가정하면 Linux의 경우 플랫폼 기본값 임). 전체 문자열을 '문자열'로 변환하는 것이 성능상의 문제입니까? – artbristol

+0

코드를 프로파일 링하지 않았지만 BB 전체를 디코딩하지 않으려 고했습니다 _ –

답변

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) { 
} 

[전체 Bytebuffer 다음 substring()를 사용 & String로 변환]로인가 오히려 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 같은 문자이지만 명시 적 문자 디코딩/인코딩이 없습니다.

물론 디코딩은 String s의 생성자에서 발생하며 플랫폼에 따라 다르기 때문에 조심하십시오.

+0

문자열의 _first 200 characters_를 검색하려고합니다. 내가 어떻게 그럴 수 있니? –

+0

디코딩 할 바이트 수는 charset에 따라 다르므로 일반적인 솔루션이 있다고 생각하지 않습니다. 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());