에 나중에 여러 번 읽는 동안 한 번 다음 ByteBuffer
&로 변환 된 큰 String
이의 ByteBuffer의 일부를 변환, 그래서 ByteBuffer
의 일부만 String
으로 변환하고 싶습니다. 다시는 <code>String</code> (텍스트의 개요)의 일부만 제시 될 필요가 문자열
1
A
답변
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());
일부 문자는 하나 이상의 바이트를 차지하므로 실제로는이 작업을 수행 할 수 없습니다. (바이트가 UTF-8로 인코딩되었다고 가정하면 Linux의 경우 플랫폼 기본값 임). 전체 문자열을 '문자열'로 변환하는 것이 성능상의 문제입니까? – artbristol
코드를 프로파일 링하지 않았지만 BB 전체를 디코딩하지 않으려 고했습니다 _ –