답변:
Base64는 3 바이트의 각 세트를 4 바이트로 인코딩합니다. 또한 출력은 항상 4의 배수로 채워집니다.
이는 n 크기의 문자열을 나타내는 base-64 표현의 크기는 다음과 같습니다.
ceil(n / 3) * 4
따라서 16kB 배열의 경우 base-64 표현은 ceil (16 * 1024 / 3) * 4 = 21848 바이트 길이 ~ = 21.8kB입니다.
거친 근사는 데이터의 크기가 원래의 4/3로 증가한다는 것이다.
ceil
와 함께 사용하는지 아니면 float
숫자 만 사용하는지에 따라 다릅니다 int
. (및 아니오 ceil
)
질문은 가능한 최악의 증가에 관한 것이기 때문에 보통 80 자마다 줄 바꿈이 있음을 추가해야합니다. 즉, base64로 인코딩 된 데이터를 Windows의 텍스트 파일로 저장하는 경우 Linux에서 각 줄에 대해 1 바이트 씩 2 바이트가 추가됩니다.
실제 인코딩으로부터의 증가는 위에서 설명되었다.
이것은 나 자신에 대한 미래의 참조입니다. 질문은 최악의 경우이므로 줄 바꿈을 고려해야합니다. RFC 1421은 최대 행 길이를 64 자로 정의하지만 RFC 2045 (MIME)는 한 줄에 최대 76자가 있다고 말합니다.
후자는 C # 라이브러리가 구현 한 것입니다. 따라서 줄 바꿈이 2 자 (\ r \ n) 인 Windows 환경에서 다음을 얻습니다.Length = Floor(Ceiling(N/3) * 4 * 78 / 76)
참고 : 마루는 C #으로 테스트하는 동안 마지막 줄이 정확히 76 자로 끝나면 줄 바꿈이 발생하지 않기 때문입니다.
다음 코드를 실행하여 증명할 수 있습니다.
byte[] bytes = new byte[16 * 1024];
Console.WriteLine(Convert.ToBase64String(bytes, Base64FormattingOptions.InsertLineBreaks).Length);
76 문자 줄로 base64로 인코딩 된 16KB에 대한 답 : 22422 자
Linux에서는 가능하다고 가정 Length = Floor(Ceiling(N/3) * 4 * 77 / 76)
하지만 .NET 코어에서 아직 테스트하지 않았습니다.