2013-05-03 3 views
4

단일 파일에 100MB의 데이터가 있습니다. 이 100MB 데이터는 사실상 나뉘어집니다. 즉, 서로 다른 5MB 덩어리를 가리키는 NSInputStream을 만들어야합니다. NSData를 사용하여 스트림을 생성하면이 작업을 수행 할 수 있습니다.NSInputStream을 서브 클래 싱하여 로컬 파일 경로에서 데이터의 특정 부분을 업로드하십시오.

하지만 파일의 데이터 범위를 가리키는 NSInputStream을 사용할 수 있는지 알고 싶습니다.

+0

왜 대신'NSFileHandle'를 사용하지? – Mar0ux

+0

기본적으로 크기가 5MB 인 NSData 인스턴스를 여러 개 만들고 싶지 않습니다. 그것은 많은 기억을 먹는다. –

+0

그러면 일부 직렬 대기열에서 한 번에 5MB의 부분을 하나 생성해야합니다 (예 : –

답변

2

NSInputStream 인스턴스를 NSURLRequest.HTTPBodyStream으로 전달하여 파일을 업로드하려는 경우 실제로는 NSInputStream의 하위 클래스를 만들고 업로드 할 바이트 만 스트리밍해야합니다. 여기서 NSFileHandle을 사용하는 것은 옵션이 아닙니다.

NSURLRequest과 호환되는 NSInputStream의 하위 클래스를 만드는 것은 매우 까다 롭습니다. 그러나 다행스럽게도 수행 방법에 대해서는 great blog post입니다.

Here you can find a ready to use subclass of NSInputStream for this purpose.

ChunkInputStream을 다른 파일 NSInputStream으로 보내고 파일의 시작 위치와 읽을 바이트 수를 전달할 수 있습니다.

스위프트 예 :

let fileInputStream = NSInputStream(fileAtPath: "/tmp/readme") 
let inputStream = ChunkInputStream(inputStream: fileInputStream) 
inputStream.startPosition = 2097152 
inputStream.readMax = 1048576