2013-07-01 43 views
1

在我的Android應用程序,它收集了一些數據和照片扔手機。如何獲得千字節(KB)的物體的大小或字節

之後,它插入所有這些東西變成一個對象之後,它這個對象發送到服務器。

之前發送該對象到服務器我想顯示的數據的用戶規模和多少killobyte使用這些數據發送到服務器。 這裏我使用的是progressBar其中只顯示數據正在發送到服務器。

這裏是我想要的,將數據發送到服務器首先它表明的是數據的大小和之前開始進度如何可以傳輸的數據有多少重命名後。

我送的對象是這樣的:

public class ServerData implements Serializable { 
// some code 
} 
+0

你是如何發送的對象?作爲一個字符串,序列化,json,...? –

+0

你可以很容易地獲得文件的大小;然而,這並沒有告訴這實際上將沿導線進行交換的字節數:TCP開銷等 – fge

+0

對象是序列化.... –

回答

1

的一種方式做到這一點,是將其寫入緩衝流,發現它的大小,然後把它寫入你的服務器作爲字節數組。

 ByteArrayOutputStream ostream = new ByteArrayOutputStream(); 
      try { 
       ObjectOutputStream obStream = new ObjectOutputStream(ostream); 
       obStream.writeObject(yourObject); 
       byte[] rawObject = ostream.toByteArray(); 
       ostream.close(); 

       int size = rawObject.length; 
      //edit for your case 
      OutputStream socketOut = socket.getOutputStream(); 
      socketOut.write(rawObject); 
      socketOut.close(); 

     } catch (IOException e) { 
     e.printStackTrace(); 
     } 
+0

@ Mr.Me ... thanx ...但如果我在ObjectOutputStream中給出ByteArrayOutputStream的對象,那麼我如何給socket.getOutputStream()。 我的代碼是:ObjectOutputStream obStream = new ObjectOutputStream(socket.getOutputStream()); 但由於你的代碼:ObjectOutputStream obStream = new ObjectOutputStream(ostream); 然後,我給socket.getOutputStream()。 –