문자열과 함께 istream을 사용하는 방법

파일을 문자열로 읽고 싶습니다. 효율적으로 수행하는 방법에 대한 다양한 방법을 찾고 있습니다.

고정 크기 * char 버퍼 사용 [1 210] 나는 Tony로부터 답변 을 받았는데, 16kb 버퍼를 만들고 그 버퍼를 읽고 더 이상 읽을 것이 없을 때까지 버퍼를 추가합니다. 나는 그것이 어떻게 작동하는지 이해하고 매우 빠르게 발견했습니다. 내가 이해하지 못하는 것은 그 대답의 주석에서 이런 식으로 모든 것을 두 번 복사한다고 말합니다. 그러나 내가 이해하는 것처럼 디스크가 아닌 메모리에서만 발생하므로 거의 눈에 띄지 않습니다. 버퍼에서 메모리의 문자열로 복사하는 것이 문제입니까?

istreambuf_iterator 사용

다른 답변 은 istreambuf_iterator를 사용합니다. 코드는 아름답고 최소한으로 보이지만 매우 느립니다. 왜 그런지 모르겠습니다. 반복기가 왜 그렇게 느린가요?

사용 memcpy ()

이 질문에 memcpy ()가 가장 빠른 네이티브 메서드이므로 사용해야한다는 의견을 받았습니다. 그러나 문자열과 ifstream 객체와 함께 memcpy ()를 어떻게 사용할 수 있습니까? ifstream은 자체 읽기 기능으로 작동해야하지 않습니까? memcpy ()를 사용하면 이식성이 손상되는 이유는 무엇입니까? VS2010 및 GCC와 호환되는 솔루션을 찾고 있습니다. memcpy ()가 이들과 함께 작동하지 않는 이유는 무엇입니까?

+ 가능한 다른 효율적인 방법이 있습니까?

10MB 미만의 작은 바이너리 파일에 대해 어떤 셸을 사용하는 것이 좋습니까?

(내가 원하지 않는 ifstream을 어떻게 문자열로 읽을 수 있는지 다른 방법을 비교하는 데 더 관심이 있기 때문에이 질문을 부분으로 나눕니다.)

10
задан Community 23 May 2017 в 11:44
поделиться