我对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();
答案 0 :(得分:0)
每次当流来到你创建一个新数据并尝试追加..但实际上你并没有将所有数据附加到你正在这样做的一个数据对象NSMutableData *dataa=[[NSMutableData alloc] initWithLength:0]
我更喜欢有一个实例变量并且喜欢这个
if(!_data) {
_data = [[NSMutableData alloc] initWithLength:0];
}
整个代码应该是这样的,代码来自apple documentation
switch(eventCode) {
case NSStreamEventHasBytesAvailable:
{
if(!_data) {
_data = [[NSMutableData data] retain];
}
uint8_t buf[1024];
unsigned int len = 0;
len = [(NSInputStream *)stream read:buf maxLength:1024];
if(len) {
[_data appendBytes:(const void *)buf length:len];
// bytesRead is an instance variable of type NSNumber .
[bytesRead setIntValue:[bytesRead intValue]+len];
} else {
NSLog(@"no buffer!");
}
break;
}
您应该处理流事件。 Stream不会将数据放在一个大块中,这就是我们在这里添加数据的原因。将使用事件调用Delegate方法,您可以设置事件检查。
当您收到此活动时NSStreamEventEndEncountered
关闭stream
个对象并创建uiimage
object
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];
}