2011-01-13 4 views
1

일부 데이터 (정확한 문자)가 포함 된 ByteBuffer가 있습니다. 첫 번째 공백 문자까지 바이트 만 시작하도록 파싱하려면 어떻게해야합니까?공백을 찾는 ByteBuffer 구문 분석

+0

1 바이트 또는 2 바이트 문자를 사용 하시겠습니까? –

+0

문자 인코딩은 무엇입니까? – finnw

+0

아스키, 1 바이트 문자 – mkrenge

답변

3

공백이 생길 때까지 가장 간단한 방법으로 ByteBuffer를 던졌습니다. 예 :

ByteBuffer buffer = 
StringBuilder sb = new StringBuilder(); 
char ch; 
while(buffer.remaining() > 0 && !Character.isWhitespace(ch = (char) buffer.get())) 
    sb.append(ch); 

더 효율적인 방법이 있지만 가장 간단한 방법 일 수 있습니다.

+0

문자의 크기는이 문제가됩니까? getchar()을 사용하는 것이 더 나은 방법일까요? –

+0

@Jacob : 네, 크기가 중요합니다 :-). 'get()'은 버퍼의 각 바이트가 ASCII 문자 (엄격한 ASCII, 즉 값 <128)를 나타내는 경우 정확합니다. 'getChar()'는 UCS-2로 인코딩 된 데이터입니다 (저는 믿습니다). – sleske

+0

get()은() & 0xFF를 얻으면 높은 비트가 없다고 가정해도 작동합니다 –

2

getChar() 메서드를 사용하면 다음 문자가 꺼내집니다. 그것을 확인하고 공백 문자를 확인하십시오. 그것을 읽지 마라.

+0

-1 인코딩을 모르면'getChar()'가 무엇을 줄지 알 수 없습니다. – sleske

+1

+1 여기서는 인코딩이 부적합합니다. getChar()가 반환 할 내용을 정확히 알고 있습니다. getChar()는 현재 바이트 순서에 따라 2 바이트를 제공합니다. 이 두 바이트가 "공백"과 일치하는지 여부는 귀하에게 달려 있습니다. jzd의 코멘트는 나에게 잘 보인다. (허락되지 않은 공백 체크로 꽤 많은 문제가 옮겨졌지만 여전히 정확합니다.) –