Ios 未从服务器正确接收UIImage

Ios 未从服务器正确接收UIImage,ios,objective-c,uiimage,inputstream,Ios,Objective C,Uiimage,Inputstream,我对objective-c有点陌生,所以请帮助我。我正在接收图像,但不完全是我的代码。 我确信问题就在这里,而不是服务器端,但是如果您需要我发布服务器端的代码,那么我会这样做 uint8_t buf[3000000]; int len = 0; len = [inputStream read:buf maxLength:3000000]; UIImage* fooo ; NSMutableData *dataa=[[NSMut

我对objective-c有点陌生,所以请帮助我。我正在接收图像,但不完全是我的代码。 我确信问题就在这里,而不是服务器端,但是如果您需要我发布服务器端的代码,那么我会这样做

       uint8_t buf[3000000];
       int len = 0;
       len = [inputStream read:buf maxLength:3000000];
       UIImage* fooo ;
       NSMutableData *dataa=[[NSMutableData alloc] initWithLength:0];
       do{
       len = [inputStream read:buf maxLength:3000000];
           if(len>0) current+=len;
       }
       while (len>-1);
       [dataa appendBytes: (const void *)buf length:current];
       fooo = [[UIImage alloc]  initWithData:dataa];
   [inputStream close];
   [outputStream close];
服务器端

 String FilePath=xxxxx.jpeg";
 System.out.println (FilePath);
  File file1=new     
   File(xxxxxx\\38.jpeg");
   long v=file1.length();
    byte [] mybytearray  = new byte [(int)file1.length()]; 
FileInputStream fis = new     
    FileInputStream(FilePath);
    BufferedInputStream bis = new    
    BufferedInputStream(fis);
    bis.read(mybytearray,0,mybytearray.length);
    os = connectionSocket.getOutputStream();//outpustream
    System.out.println("Sending...");
    os.write(mybytearray,0,mybytearray.length); 
    System.out.println("Sent");
    os.flush();

每次流到来时,您都会创建一个新数据并尝试附加。。但实际上,您并不是将所有数据追加到一个数据对象,而是这样做的
NSMutableData*dataa=[[NSMutableData alloc]initWithLength:0]

我希望有一个实例变量,并这样做

 if(!_data) {
    _data = [[NSMutableData alloc] initWithLength:0];
 }
整个代码应该是这样的,代码来自苹果

您应该处理流事件。流不会将数据放在一大块中,所以这就是为什么我们在这里添加数据。委托方法将随事件一起调用,您可以设置事件检查。 当您收到此事件时,请关闭
对象并创建
uiimage
对象

switch(NSStreamEventEndEncountered){
   [stream close];
   [stream removeFromRunLoop:[NSRunLoop currentRunLoop]
                forMode:NSDefaultRunLoopMode];
   [stream release];
   stream = nil; // stream is ivar, so reinit it

  if (_data!=nil)
      UIImage *image = [UIImage imageWithData:_data];
}

这将是非常容易的,如果你从服务器端得到一个图像的url,并得到这样的图像<代码>UIImage*image=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:MyURL]]服务器是一个java服务器,我正在使用sockets发送和接收这可以与任何服务器一起工作。。。但由于插座是您的要求,所以您做得很对。。。在这种情况下,可能有一些数据包尚未收到…如果图像大小大于分配的缓冲区,则您将丢失某些内容>
switch(NSStreamEventEndEncountered){
   [stream close];
   [stream removeFromRunLoop:[NSRunLoop currentRunLoop]
                forMode:NSDefaultRunLoopMode];
   [stream release];
   stream = nil; // stream is ivar, so reinit it

  if (_data!=nil)
      UIImage *image = [UIImage imageWithData:_data];
}