2010-05-29 2 views
0

STDIN에 대해 NSInputStream을 제공하는 클래스에 접근자를 제공하고 싶습니다. 아마도 수 백 메가 바이트 (또는 기가 바이트는 아닐 수도 있지만)의 데이터 일 수 있습니다.잠재적으로 큰 STDIN 데이터를 두 번 이상 처리합니다.

발신자가이 NSInputStream을 가져 오면 발신자가 포함 된 데이터를 고갈하지 않아도 읽을 수 있어야합니다. 즉, 다른 코드 블록이 NSInputStream을 요청할 수 있으며이 코드에서 읽을 수 있어야합니다.

모든 데이터를 먼저 메모리 소모가 발생할 수있는 NSData 객체로 복사하지 않고 처리 할 수있는 옵션은 무엇입니까? 반환 된 NSInputStream은 동일한 인스턴스 일 필요는 없으며 단순히 동일한 데이터를 제공해야합니다.

제가 지금 생각해 볼 수있는 가장 좋은 점은 임시 파일에 STDIN을 복사 한 다음 해당 파일을 사용하여 NSInputStream 인스턴스를 반환하는 것입니다. 이것은 이것을 처리하는 유일한 방법 일까? 임시 파일 경로를 선택하는 경우주의해야 할 사항이 있습니까?

편집 | 언급해야 할 것은 이 실제로 STDIN이 아니며, 이것은 멀티 스레드 FastCGI 응용 프로그램에 있으며 STDIN에서 나온 FCGX_Request.in 스트림입니다. 파이프 나 소켓에서 데이터를 읽을 때

답변

2

, 당신은 세 가지 옵션이 있습니다

  • 프로세스를하고 잊어 버려.
  • 메모리의 전체 레코드에 추가하고 처리하기 전이나 후에 처리하십시오.
  • 전체 파일에 추가하고 처리하기 전이나 후에 처리하십시오.

전체 목록입니다. 단기간 또는 장기간의 저장이 아닌 다른 곳에서는 기록 할 수 없으므로 읽는 데이터로 수행 할 수있는 유일한 작업은 전혀 기록하지 않는 것입니다.

데이터를 다시 얻는 유일한 방법은 무엇이든지 다시 보내려는 것입니다.

+0

눈부신 감사합니다. 데이터를 직접 처리 한 다음 다시 소비자에게 제공해야하므로 필자의 첫 번째 본능으로 이동하여 임시 파일에 기록해야합니다. – d11wtq