Ios 未从服务器正确接收UIImage
我对objective-c有点陌生,所以请帮助我。我正在接收图像,但不完全是我的代码。 我确信问题就在这里,而不是服务器端,但是如果您需要我发布服务器端的代码,那么我会这样做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
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];
}