我正在構建一個Android應用程序,需要從我們的服務器發送一些文件。我已經實現了Java中的服務器套接字和Android套接字客戶端並進行了測試,但傳輸速度太慢。如何使用Java將服務器中的文件從服務器傳輸到Android手機?
FILE SIZE: 5 MB
TRANSFER TIME: 15.3 seconds
所以服務器建立我自己的電腦上,我使用端口轉發,所以我可以能夠從任何網絡連接到它。如果你認爲這是相關的,這是我的網絡的速度測試:http://www.speedtest.net/my-result/3965566858
現在的服務器代碼:
BufferedInputStream musicData = new BufferedInputStream(new FileInputStream(new File("fileSrc")));
byte[] data = new byte[8192];
int count = 0;
while ((count = musicData.read(data)) > 0) {
outStreamMusic.write(data, 0, count);
}
客戶端代碼:
InputStream inStream = socketClient.getInputStream();
byte[] data = new byte[8192];
int count = 0;
while ((count = inStream.read(data)) > 0) {
tempFile.write(data, 0, count);
}
因此,這將打開該文件,解析它併發送字節,直到沒有別的東西要發送。我很確定這可以做得更快,但我不知道如何。 Android客戶端只需打開一個到我的IP /端口的套接字並從中讀取數據。任何想法如何使這個更快?
你可以玩8192,但主要是它(nio渠道是替代品,但這可能不會更快)。 '0'對於'read()'來說是一個合法的值,即使還有更多。我也擺脫了'BufferedInputStream',因爲你有自己的緩衝區,而另一個不會有幫助。客戶端代碼的外觀如何? – zapl 2014-12-07 00:45:09
手機是在wifi還是手機?如果在蜂窩上,這可能是預期的 - 你的限制因素是延遲,而不是吞吐量。在蜂窩上建立連接需要很長時間。 – 2014-12-07 00:55:16
另一個想法是,你使用緩衝文件編寫器還是無緩衝?如果沒有緩衝,那可能是問題所在。嘗試對寫入進行註釋以將其限制爲傳輸時間,以隔離問題。 – 2014-12-07 00:58:35