簡體   English   中英

android 中的套接字編程 - 從輸入 stream 讀取字節在 Wifi 上非常慢

[英]Socket programming in android - Reading bytes from input stream is very slow over Wifi

我正在使用 Sockets 在我的 android 應用程序中通過 Wifi 傳輸數據,我已將緩沖區大小設置為 10MB 左右,這是我用於發送數據的代碼。

// Sending data from a file in chunks, PREFERRED_CHUNK_SIZE is [1024 * 1024 * 10]

var fileSize = fileList[index].totalSize
val buffer = ByteArray(SocketConstants.PREFERRED_CHUNK_SIZE)
var length: Int
do {
    length = stream.read(buffer, 0, min(buffer.size, fileSize))
    bos.write(buffer, 0, length)
    fileSize -= length
} while (fileSize != 0)
 stream.close()

我正在為多個文件傳輸重用相同的代碼,條件文件大小,= 0 確保我只讀取單個文件的那么多字節,因此我使用了最小 function 可以說我想發送 36 MB 它被發送為 10 (10485760 字節)、10(10485760 字節)、10(10,485,760 字節)。 6.

以下是我的接收器代碼:

        var fileSize = file.totalSize
        var current: Int
        var offset = 0
        val byteArray = ByteArray(SocketConstants.PREFERRED_CHUNK_SIZE)
        val bufferedInputStream = BufferedInputStream(inputStream)
        do {
            current = bufferedInputStream.read(byteArray, 0, min(byteArray.size, fileSize))
//            outputStream.write(byteArray, 0, current)  To ignore file write for now
            fileSize -= current
            offset += current
            println("Length: $current")
            file.bytesDownloaded = offset
            updateList(offset)
        } while (fileSize != 0)
        outputStream.flush()
        outputStream.close()

閱讀時,我得到了非常小的字節塊,1358、1358、1358、1358、1358。

這真的很慢,我不明白是什么導致 inputStream.read() 如此小的讀取。

我已經為 SocketServer 和 Socket 實例設置了發送方和接收方緩沖區大小。 但是結果並沒有什么不同

在尋找了幾天的解決方案並嘗試了多種方法來提高在 inputstream 上調用 read 時的速度后,我終於找到了解決方案。

感謝 Gerd 在評論中幫助我開始思考 Wifi 連接的強度。

我發現,如果您使用 Android Wifi Manager 連接到 wifi,則建立的連接速度較慢,如果您連接到實際的 wifi,您甚至不會在任務欄中看到。

為了克服它,我使用手機中的 Wifi 設置手動連接到熱點,並且速度更快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM