UTF-8 파일에서 의사 무작위 문자를 추출한다고 가정 할 때, 나는 개인적으로 임의의 장소로 점프하는 방법을 생각하고 앞으로 ' 문자 '위치 (내 느낌은 까다로운 제안이 될 것입니다) 이 부분은입니다. 어떻게 같은 약 :
- 는
- 는 경험적으로 문자 수를 추측 바이트 파일의 길이를 설정합니다 - 예를 들어, 어떤 적합한 신체에서 설립 된 상수에 의해 스케일링에 의해; 또는이 파일
- 파일이 매우 큰 경우
1..<guessed number of characters in file>
- 의 의사 난수를 선택보다 잘 나타내는 수 있습니다 스케일링 상수를 얻기 위해, 그들은 설명 얼마나 많은 문자를 처음
n
바이트를 검사하고보고하여 (필자가 추측하고있는 것, 그렇지 않다면 요청하지 않을 것입니다.) 버퍼링 된 읽기를 사용하여 다음을 수행하십시오.
- 원하는 문자에 도달 할 때까지 파일의 바이트를 읽고 UTF-8로 디코딩하십시오. 파일 끝에서 벗어나면 마지막 바이트를 사용하십시오.
여기서 버퍼링 된 읽기는 두 개의 버퍼를 두 번 읽는 동안 문자의 바이트가 분할 될 때 컨텍스트를 잃지 않도록 '첫 번째'로 교체해야합니다. :
읽기 버퍼 A : 바이트 1,000에서 1,999 사이 읽기 버퍼 B : 바이트 2,000에서 2,999 사이
는 문자는 문맥을 잃게 하나의 버퍼를 사용하여 바이트를 1998-2001
을 차지합니다.
읽기 완충액 A
: 바이트 3000-3999
는 현재 시행되고있는 우리가 문자로 바이트 스트림으로 변환 할 때 이 버퍼 B를 다음 버퍼. 아래 @jleedev에 의해 언급, 다른 대답에서 볼 수 있듯이, 그것은 이 보장 된 문자 시작으로 '앞으로 스크롤'에 실제로 쉽고 안전하게으로
. 그러나 위의 문자 수 추정치는 여전히 유용 할 수 있습니다.
홀수 바이트 위치로 이동하지 않으면 UTF-16이 자동으로 동기화됩니다. 유니 코드 인코딩은 특히 자체 동기화되도록 설계되었으며 적은 수의 코드 단위 만 건너 뛸 수 있다는 강력한 보장이 있습니다. – Philipp