从c+传输jpeg+;到android(java) 我在努力将一个简单的JPEG文件从C++的TC3+到java(Android)的内部传输到一个ID3V2标签中。库“taglib”提供了提取此文件的功能,我可以将jpeg保存为新文件

从c+传输jpeg+;到android(java) 我在努力将一个简单的JPEG文件从C++的TC3+到java(Android)的内部传输到一个ID3V2标签中。库“taglib”提供了提取此文件的功能,我可以将jpeg保存为新文件,java,c++,android,sockets,taglib,Java,C++,Android,Sockets,Taglib,send函数如下所示 char *parameter_full = new char[f3->picture().size()+2]; sprintf(parameter_full,"%s\n\0",f3->picture().data()); // send result = send(c,parameter_full,strlen(parameter_full),0); delete[] parameter_full; 在哪里 f3->picture().data()返回指

send函数如下所示

char *parameter_full = new char[f3->picture().size()+2];
sprintf(parameter_full,"%s\n\0",f3->picture().data());

// send
result = send(c,parameter_full,strlen(parameter_full),0);

delete[] parameter_full;
在哪里

f3->picture().data()返回指向内部数据结构的指针(返回char*),并 f3->picture().size()返回数组的大小

然后Android接收到了它

String imageString = inFromServer.readLine();
byte[] imageBytes = imageString.getBytes();
Bitmap cover = BitmapFactory.decodeByteArray(imageBytes,0,imageBytes.length);
但无论如何,decodeByteArray总是返回null。我的想法是Java无法正确接收图像,因为imageString只包含4个字符……而提取的jpeg文件的大小为12.7KB。 但出了什么问题


Martin

您不应该对字节数据使用字符串函数,因为0值作为字符串终止符。在java方面,如果需要复制C++代码> char *<代码>,也可以在Java方面拷贝< <代码>输入流>代码> <代码> >字节[]/COD>读取函数。这不是一根绳子。以原始字节的形式读入。啊,谢谢你的提示!现在它开始工作了。首先,我以字节(coverLength)为单位传输文件大小,然后使用send(c,f3->picture().data(),coverLength,0)传输图片的每个字节。coverLength已正确接收,但读取(byte[],int,int)函数过早停止。int length=inputStream.read(imageBytes,0,coverLength)总是返回小于coverLength的字节数…是的,您不必一次获得整个字节数组。您应该在循环中调用read,并跟踪读取的字节数。或者,您可以使用ApacheCommons IOUtils,它有一个很好的实用方法,名为
toByteArray
:啊,最大数据包大小,谢谢!IOUtils在Android SDK中不可用。经过一番艰苦的斗争后,这种转移现在几乎奏效了。首先,我发送长度:sprintf_s(buf,10,“%d\n”,coverLength);发送(c,buf,strlen(buf),0);然后发送数据片段。同时读取数据。包含INFOROMSERVER.readLine()的coverLength和包含for(int count=0;countcoverLength。还请注意,读取字节数组比一次读取一个字节要高效得多;但问题依然存在。即使只有383字节的文件…抱歉:|