streambuf는 정확히 무엇입니까? 어떻게 사용하나요?
I / O 스트림이 C ++에서 작동하는 방식에 대해 조금 더 배우려고하는데, 언제 무엇을 사용해야하는지 정말 혼란 스럽습니다.
정확히 무엇입니까 streambuf
? , an 또는 a 와 비교하여는
언제 사용 합니까? (마지막 세 개는 이미 알고 있지만, 그렇지 않다면 그들과 어떻게 비교 되는지 는 모릅니다 .)streambuf
string
istream
vector
streambuf
스트림 버퍼는 입력 또는 출력 장치를 나타내며 해당 장치에 대한 포맷되지 않은 I / O를위한 저수준 인터페이스를 제공합니다. 스트림은, 다른 한편으로는, 기본 포맷되지 않은 I / O 함수로서 포맷 특히 I / O 기능 (즉,를 통해 버퍼 주위에 높은 수준 래퍼를 제공 operator<<
하고 operator>>
과부하). 스트림 객체는 스트림 버퍼의 수명을 관리 할 수도 있습니다.
예를 들어 파일 스트림에는 내부 파일 스트림 버퍼가 있습니다. 스트림은 버퍼의 수명을 관리하고 버퍼는 파일에 대한 실제 읽기 및 쓰기 기능을 제공합니다. 스트림의 형식화 연산자는 궁극적으로 스트림 버퍼의 형식화되지 않은 I / O 함수에 액세스하므로 스트림의 I / O 함수 만 사용하면되고 버퍼의 I / O 함수를 직접 건드릴 필요가 없습니다.
차이점을 이해하는 또 다른 방법은 로케일 객체의 다양한 용도를 살펴 보는 것입니다. 스트림 등의 서식을 함께 할 수있는 측면 사용 numpunct
과 num_get
. 또한 스트림의 오버로드 operator<<
와 operator>>
사용자 정의 시간 또는 돈 데이터 유형이 시간 및 돈 형식화 패싯을 사용할 것으로 예상 할 수 있습니다 . 그러나 스트림 버퍼는 인터페이스가 사용하는 단위와 바이트 사이를 변환하기 위해 codecvt 패싯을 사용합니다. 따라서, 예를 들어,에 대한 인터페이스를 basic_streambuf<char16_t>
사용 char16_t
있도록 basic_streambuf<char16_t>
내부적으로는 사용하는 codecvt<char16_t, char, mbstate_t>
포맷 변환 기본적 char16_t
으로 버퍼에 기록 단위를char
기본 장치에 기록 된 단위. 따라서 스트림은 대부분 포맷 용이고 스트림 버퍼는 다른 외부 인코딩을 사용할 수있는 장치에 대한 포맷되지 않은 입력 또는 출력을위한 저수준 인터페이스를 제공합니다.
I / O 장치에 대한 형식화되지 않은 액세스 만 원할 때 스트림 버퍼를 사용할 수 있습니다. 스트림 버퍼를 공유하는 여러 스트림을 설정하려는 경우 스트림 버퍼를 사용할 수도 있습니다 (버퍼의 수명을 신중하게 관리해야 함). 넓은 문자 스트림 버퍼처럼 보이게 wbuffer_convert
하는 a의 파사드 역할을하는 C ++ 11 과 같이 사용할 수있는 특수 목적 스트림 버퍼도 있습니다 basic_streambuf<char>
. 어떤 로케일에 첨부 된 codecvt 패싯을 사용하는 대신 생성 된 codecvt 패싯을 사용합니다. 일반적으로 적절한 패싯이있는 로케일이 포함 된 와이드 스트림 버퍼를 사용하여 동일한 효과를 얻을 수 있습니다.
의 도움으로 streambuf
더 낮은 수준 에서 작업 할 수 있습니다 . 기본 버퍼에 대한 액세스를 허용합니다.
다음은 몇 가지 좋은 예입니다. C ++ streambufs를 사용하여 복사,로드, 리디렉션 및 티 와 비교를 참조하면 도움이 될 수 있습니다.
자세한 내용은 IOstream 라이브러리 를 참조하십시오.
참고 URL : https://stackoverflow.com/questions/8116541/what-exactly-is-streambuf-how-do-i-use-it
'Nice programing' 카테고리의 다른 글
numpy를 사용하는 배열의 효율적인 임계 값 필터 (0) | 2020.10.24 |
---|---|
Android Studio에서 logcat이 스크롤되지 않도록하는 방법 (0) | 2020.10.24 |
HTTP 헤더 또는 응답 본문에 나머지 오류 메시지가 있습니까? (0) | 2020.10.24 |
gcc / g ++와 cc1 / cc1plus의 차이점은 무엇입니까? (0) | 2020.10.24 |
WPF 또는 Windows Forms (0) | 2020.10.24 |