2013-05-03 101 views
4

我在單個文件中有100 MB的數據。這100兆數據將被虛擬分割。即我需要創建一個指向不同5MB塊的NSInputStream。 這可以通過使用NSData創建流來實現。繼承NSInputStream以從本地文件路徑上傳特定部分的數據

但是,我想知道是否可以有一個NSInputStream指向文件中的一系列數據?

+0

爲什麼不使用'NSFileHandle'呢? – Mar0ux 2013-05-03 12:43:19

+0

基本上我不想創建幾個大小5MB的NSData實例。它吃了很多的記憶。 – 2013-05-03 12:47:09

+0

然後,您應該在某個串行隊列中一次創建5MB的一部分,例如 – 2013-05-03 12:50:09

回答

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