2017-02-23 7 views
0

CharBufferByteBuffer으로 변환하려면 어떻게해야합니까? 이 작업을 수행하는 쉬운 방법이 있습니까?CharBuffer를 ByteBuffer로 변환

한편 은 ByteBuffer에서 ByteBuffer.asCharBuffer()으로 전화하기가 쉽습니다.

편집 :

나는 점점 알고있는 간단한 방법 ByteBufferCharset.encode(CharBuffer cb)

통해 그러나 나는 더 직접적인 방법이 있었다 바라고, 즉 단순히 실제 문자를 저장하는 데 사용되는 기본 바이트 배열을 얻을 , 어떤 인코딩도하지 않고.

편집 2 : 는 그냥 CharBuffer를 내부 char[]에 데이터를 저장하기 때문에 더 byte[]의 기초가 없습니다 byte[] 나에게 발생했습니다.

+0

똑바로 설정하면'CharBuffer'가 생성되지 않고'ByteBuffer'의 나머지 부분에 대한'CharBuffer' 뷰가 생성됩니다. –

+0

'CharBuffer' 뷰를 통해'ByteBuffer'에 다시 쓸 수 있습니다. 이것이 당신에게 당신이 원하는 것을주는 지 궁금합니까? 어쩌면 상위 레벨에서 당신이 얻으려는 것을 설명하고 질문하는 이유를 설명해야합니다. –

+1

그건 내 고향이 아니기 때문에 나는 틀릴 수도있다 : ByteBuffer.wrap (yourCharBuffer.toString(). getBytes())'? 선택적으로 문자 인코딩을 제어하기 위해'CharSet' 또는 char 셋 이름을'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 converterCharArrayresultByteArray를 백업한다 얻고있다. 그것은 당신의 요구 사항에 도달 할 수있는만큼 가깝습니다. 나는 뭔가를 놓칠지도 모른다.

이 경우 바이트 배열에는 버퍼 내용에 필요한 공간보다 많은 공간이 있으므로 마지막에는 몇 가지 추가 0 바이트가 있음을 알 수 있습니다.

원래 CharBuffer을 채운 코드가 CharBuffer의 바이트 버퍼를 채울 수 있다면 조금 더 간단 할 수 있습니다.

제안 사항이 있으시면 Charset.encode(CharBuffer), 더 간단합니다.