2011-08-14 35 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來完成讀取和結束循環 –