Oimb
172
2018-05-17 00:43:48
1
259

자바 String의 생성자 관련 질문입니다


https://docs.oracle.com/javase/7/docs/api/

이 사이트를 보면 생성자중에서

public String(byte[] bytes,
int offset,
int length)

Constructs a new String by decoding the specified subarray of bytes using the platform's default charset. 
The length of the new String is a function of the charset, and hence may not be equal to the length of the subarray.
The behavior of this constructor when the given bytes are not valid in the default charset is unspecified. 
The CharsetDecoder class should be used when more control over the decoding process is required.
부분이 있는데 
이 영어로 설명 되어있는부분에 대해서 질문 드립니다.

플랫폼의 디폴트 캐릭터 세트를 사용해, 지정된 바이트 부분 배열을 복호화하는 것에 의해, 새로운 String를 구축합니다.

새로운 String의 길이는 charset의 함수이므로 하위 배열의 길이와 같지 않을 수 있습니다.

지정된 캐릭터 세트가 디폴트의 캐릭터 세트로 유효하지 않은 경우의이 생성자의 동작은 지정되지 않습니다. CharsetDecoder 클래스는 디코딩 프로세스에 대한 더 많은 제어가 필요할 때 사용해야합니다.

이러 한데 여기서 진하게 처리한 부분이 정확히 무얼 뜻하는지가 이해가 잘 되지 않아서 질문 드립니다.

0
0
  • 답변 1

  • yeori
    289
    2018-05-17 01:40:43

    영문자는 한 글자가 1바이트에 대응함

    따라서 6글자는 6바이트가 됨

    하지만 한글, 일어,중국어 등은 한 글자가 2~3 바이트에 대응함

    따라서 "배고프다" 4글자가 인코딩에 따라서 12바이트가 될 수도 있고, 8바이트가 될 수도 있습니다.


    위 문서는길이 N인 바이트 배열의 일부분인 길이 K의 배열로 문자열을 만들었을 때 이 문자열의 길이가 K일거라고 단정하지 말라는 뜻입니다(글자가 다 영문자라도 인코딩에 따라서 알파벳마다 2바이트씩 할당되어 있을 수 있음)

    또한 생성자에 인코딩 charset 을 지정하지 않았으므로 시스템의 기본 charsret을 사용해서 디코딩을 하니까 배열 넘길때 니들이 잘 알아서 넘겨라, 뭐 이런뜻입니다.(글자 깨져도 내 책임 아님!)

    1
  • 로그인을 하시면 답변을 등록할 수 있습니다.