2011-08-14 29 views
-1

我正在使用此代码来从Facebook服务器获取我的图像。android和java上的二进制数据套接字

String imageURL = "http://graph.facebook.com/"+id+"/picture?type=large";        
InputStream inputStream = new URL(imageURL).openConnection().getInputStream(); 
DataInputStream dataStream = new DataInputStream(inputStream); 
byte[] dataBuffer = new byte[4096]; 
ByteArrayOutputStream dataHolder = new ByteArrayOutputStream(); 
int n; 

while ((n=dataStream.read(dataBuffer))!=-1){ 
    dataHolder.write(dataBuffer, 0, n); 
} 

,并使用相同的方法,从我的服务器,让我的形象:

FileInputStream inputStream = new FileInputSTream("/image.jpg"); 
DataOutputStream dataStream = new DataOutputStream(socket.getOutpustStream()); 
byte[] dataBuffer = new byte[4096]; 
int n; 

while ((n=inpuStream.read(dataBuffer))!=-1){ 
    dataStream.write(dataBuffer, 0, n); 
}//get -1 perfectly 

,让他们对Android应用程序是这样的:

DataInputStream dataStream = new DataInputStream(socket.getInputStream()); 
byte[] dataBuffer = new byte[4096]; 
ByteArrayOutputStream dataHolder = new ByteArrayOutputStream(); 
int n; 

while ((n=dataStream.read(dataBuffer))!=-1){ 
    dataHolder.write(dataBuffer, 0, n); 
}//-1 ?????????????? 

但Android应用程序不能得到的正确的文件,它不能出来的形式while循环,完全不能得到-1,但昨天我无意中得到-1从我做了一些改变,真的不明白为什么我不能在我的android应用程序-1,但我可以得到它来自 服务器while循环

+0

所有你需要的是来自服务器的图像吧? – Ronnie

+0

你的问题不是很清楚。 Android上的问题是什么?你得到一个无限循环,还是它最终只是阻止? –

+0

是的正确的形象,但如果客户需要大量的图像,clent会请求大量的图像。 –

回答

1

您可以直接将输入流转换为位图而不是读取字节。

Bitmap myBitmap = BitmapFactory.decodeStream(inputStream);

+0

我很清楚,有一个错误在Java 1.4及以上,在套接字不发送FIN到第二方说数据r完成和传输完成,并在java 1.3中socket.getOutputStream()。close()doent关闭put流,但发送FIN到第二方,这就是我想要的,但它的Java套接字中的错误,并没有修复!直到Java 6 –

0

这里只是一些玻璃球猜测:你在服务器端关闭流?

在你的写作循环之后放上一个dataStream.close();

+0

但如果我关闭流所有的套接字关闭,并在Java 1.4-6它的坏习惯。请在这里看看我的评论:\ n我非常清楚,在java 1.4及以上版本中存在一个错误,即在套接字中,不会将FIN发送给第二方,以便完成数据和完成传输并在java 1.3套接字中完成。 getOutputStream()。close()doent关闭了put stream,但是把FIN发送给第二方,这就是我想要的,但是它在java套接字中的错误并且没有修复!直到java 6 –

+0

对不起,我还没有真正理解你的问题。如果您不关闭流,接收者应该如何知道图像已完成? –

+0

看起来firend,你很清楚,在读取java中的字节流时,一旦他们得到-1字节数(查看java流读取文档),但我尝试通过套接字在网络上通过套接字它尝试给我-1读数字节数意味着发送者流完成了,还关闭了使用套接字流的流关闭了所有套接字,因此它的坏习惯关闭了流,唯一的解决方法是获取读取字节的-1来完成读取和结束循环 –