代码之家  ›  专栏  ›  技术社区  ›  rui

如何在iPhone上实现分块http请求?

  •  1
  • rui  · 技术社区  · 14 年前

    目前我正在尝试使用NSMutableURLRequest,将HTTPBody设置为我的一个自定义编写的NSInputStream,它提供了这些块。

    如果不是因为NSMutableURLRequest一直要求我在NSInputStream类中实现越来越多的方法,这就没问题了。首先它要求我实现-streamStatus:而且实现起来相当简单,但是现在它要求的是-scheduleincfrunlop:forMode:。。。

    基本上,我是从算法中生成数据,并希望通过分块请求将其发送到服务器。

    代码如下:

    @interface GERHTTPChunkInputStream : NSInputStream
    {
      uint8_t counter_;
    }
    
    - (GERHTTPChunkInputStream *)init;
    - (void)dealloc;
    - (NSInteger)read:(uint8_t *)buffer maxLength:(NSUInteger)len;
    - (BOOL)getBuffer:(uint8_t **)buffer length:(NSUInteger *)len;
    - (BOOL)hasBytesAvailable;
    - (NSStreamStatus)streamStatus;
    
    @end
    
    @implementation GERHTTPChunkInputStream
    
    - (GERHTTPChunkInputStream *)init {
      [super init];
      return self;
    }
    
    - (void)dealloc {
      assert(NO);
      [super dealloc];
    }
    
    - (NSInteger)read:(uint8_t *)buffer maxLength:(NSUInteger)len {
      NSLog(@"Getting more bytes!!!");
      for (int i = 0; i < len; ++i) {
        buffer[i] = ++counter_;
      }
      return len;
    }
    
    - (BOOL)getBuffer:(uint8_t **)buffer length:(NSUInteger *)len {
      return NO;
    }
    
    - (BOOL)hasBytesAvailable {
      return YES;
    }
    
    - (NSStreamStatus)streamStatus {
      return NSStreamStatusNotOpen;
    }
    
    @end
    
    1 回复  |  直到 14 年前
        1
  •  3
  •   Codo    14 年前

    根据网络上的一些讨论,很难对 . 看一看 Multipart POST using NSInputStream NSInputStream subclass asynchronous .

    看来你真的需要实现这些奇怪的私有方法。。。