我正在开发一个android应用程序,其中我必须将位图存储在远程服务器中。步骤如下:
步骤1:将位图转换为字节数组,并将其从安卓应用程序发送到服务器,我将位图作为MultipartEntity.In服务器端发送,我将在doPost()方法中接收位图。
步骤2:将存储在database.Bitmap中的字节数组存储为blob数据类型,我能够将接收到的字节数组存储到mysql数据库中。
步骤3:检索存储为blob的位图并将其发送回android应用程序,我能够检索blob并转换为字节数组并发送。
我的问题
问题是从服务器发送的数据是以小batches.The格式接收的,图像长度为1380,但接收的长度为10,50,100‘。当我将得到的数据加在一起时,只有1345个,丢失了几个字节的数据。我在接收端张贴代码。
URL url = new URL( "http://10.0.2.2:8080/ServerPartProject/BlobGetter");
URLConnection yc = url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream())); String data;
int val=0;
while((data=in.readLine())!=null){
val=val+data.length(); //The data.length is like 10,20..
}
System.out.println("Total value obtained is "+val);//val was 1345 where it should be 1380发送端:
OutputStreamWriter writer = new OutputStreamWriter(response.getOutputStream());
writer.write(senddata);如何全身心地接受它?
发布于 2011-07-13 13:04:26
不要使用readLine()。您正在处理原始数据。原始数据不只有文本所包含的行。
您的一些字节可能被转换为2字节unicode字符,这解释了您感觉到的数据丢失。
发布于 2011-07-13 13:09:04
我将避免使用面向字符的读取器和作家来发送和接收图像数据(如果您是base64编码或其他什么您没有提到的,请忽略这一点,这大概是二进制的)。字节被解释为字符,转换回字节,然后再次解释为字符,最后返回到字节;在此过程中图像数据被破坏。使用Http对象提供的InputStream/OutputStream接口,而不是将读取器和Writers放在上面。
发布于 2011-07-13 13:09:32
您正在使用readLine()读取字节数据,这至少是一个奇怪的问题。在您的示例代码中,您不会关闭您的阅读器(应该是InputStreams)。缓冲输入可能会在缓冲区中留下一些字节,直到刷新或关闭时才会被读取。
希望这能有所帮助。
https://stackoverflow.com/questions/6679256
复制相似问题