Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 子类化NSInputStream以从本地文件路径上载数据的特定部分_Ios_Objective C_Nsstream_Nsinputstream_Cfreadstream - Fatal编程技术网

Ios 子类化NSInputStream以从本地文件路径上载数据的特定部分

Ios 子类化NSInputStream以从本地文件路径上载数据的特定部分,ios,objective-c,nsstream,nsinputstream,cfreadstream,Ios,Objective C,Nsstream,Nsinputstream,Cfreadstream,我在一个文件中有100 MB的数据。这100 mb的数据将被虚拟分割。i、 例如,我需要创建一个NSInputStream,它指向不同的5MB块。 这可以通过使用NSData创建流来实现 但是,我想知道我是否可以拥有一个NSInputStream,它指向文件中的一系列数据?如果您想通过将NSInputStream实例传递给NSURLRequest.HTTPBodyStream来上传文件,那么您确实必须创建NSInputStream的子类,并且只流式传输您想要上传的字节。这里不允许使用NSFile

我在一个文件中有100 MB的数据。这100 mb的数据将被虚拟分割。i、 例如,我需要创建一个NSInputStream,它指向不同的5MB块。 这可以通过使用NSData创建流来实现


但是,我想知道我是否可以拥有一个NSInputStream,它指向文件中的一系列数据?

如果您想通过将
NSInputStream
实例传递给
NSURLRequest.HTTPBodyStream
来上传文件,那么您确实必须创建
NSInputStream
的子类,并且只流式传输您想要上传的字节。这里不允许使用
NSFileHandle

创建与
NSURLRequest
一起工作的
NSInputStream
的子类相当棘手,但幸运的是,这里介绍了如何实现它

您可以使用另一个读取文件的
NSInputStream
来馈送
ChunkInputStream
,并传递开始位置和要读取的字节数

快速示例:

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

为什么不改用
NSFileHandle
呢?基本上我不想创建几个大小为5MB的NSData实例。它会占用大量内存。然后,您应该在Instance的某个串行队列中一次创建5MB的一部分,而您不应该这样做。创建一个
NSFileHandle
并通过执行
seekToFileOffset:
读取任意偏移量处的相应字节。这里将从我的iOS应用程序上载一个很长的文件。Im同时上传同一文件的不同部分。此外,也可以有几个文件上传。如果我用一个文件句柄创建数据,这个上传将需要大约30MB,这是我不想要的。这就是为什么我想和NSInputStream一起去。但是对于NSInputStream,我无法偏移读取缓冲区。或者,唯一的解决方案是将每个5MB数据写入一个文件,并从该文件创建一个InputStream??