Ios 子类化NSInputStream以从本地文件路径上载数据的特定部分
我在一个文件中有100 MB的数据。这100 mb的数据将被虚拟分割。i、 例如,我需要创建一个NSInputStream,它指向不同的5MB块。 这可以通过使用NSData创建流来实现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
但是,我想知道我是否可以拥有一个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??