단일 파일에 100MB의 데이터가 있습니다. 이 100MB 데이터는 사실상 나뉘어집니다. 즉, 서로 다른 5MB 덩어리를 가리키는 NSInputStream을 만들어야합니다. NSData를 사용하여 스트림을 생성하면이 작업을 수행 할 수 있습니다.NSInputStream을 서브 클래 싱하여 로컬 파일 경로에서 데이터의 특정 부분을 업로드하십시오.
하지만 파일의 데이터 범위를 가리키는 NSInputStream을 사용할 수 있는지 알고 싶습니다.
단일 파일에 100MB의 데이터가 있습니다. 이 100MB 데이터는 사실상 나뉘어집니다. 즉, 서로 다른 5MB 덩어리를 가리키는 NSInputStream을 만들어야합니다. NSData를 사용하여 스트림을 생성하면이 작업을 수행 할 수 있습니다.NSInputStream을 서브 클래 싱하여 로컬 파일 경로에서 데이터의 특정 부분을 업로드하십시오.
하지만 파일의 데이터 범위를 가리키는 NSInputStream을 사용할 수 있는지 알고 싶습니다.
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
왜 대신'NSFileHandle'를 사용하지? – Mar0ux
기본적으로 크기가 5MB 인 NSData 인스턴스를 여러 개 만들고 싶지 않습니다. 그것은 많은 기억을 먹는다. –
그러면 일부 직렬 대기열에서 한 번에 5MB의 부분을 하나 생성해야합니다 (예 : –