我正在从服务器流式传输文件,然后将其流式传输回套接字(基本上是流代理)。这用于缓冲歌曲。因此,一旦缓冲区已满,就不会再从套接字读取任何数据,直到缓冲区清空为止。但是,一旦读取了更多数据,InputStream将读取X个更多的字节,然后突然返回-1,表示文件结尾,否则返回-1。是否有超时发生?
这是一些示例代码:
InputStream data = realResponse.getEntity().getContent();
...some code...
int totalBytes = 0;
int count = 0;
// Start streaming content.
byte[] buff = new byte[1024 * 50];
while (isRunning && (readBytes = data.read(buff, 0, buff.length)) != -1) {
totalBytes += readBytes;
Log(count + ": buffer:" + buff + " readBytes:" + readBytes + " total:" + totalBytes);
client.getOutputStream().write(buff, 0, readBytes);
Log("Finished write");
count++;
}
日志示例如下所示:
0: buffer:B@45030a50 readBytes: 16164 total: 16164
1: buffer:B@45030a50 readBytes: 16384 total: 32548
...
100: buffer:B@45030a50 readBytes: 16384 total: 1654564
<a long pause here>
100: buffer:B@45030a50 readBytes: 16384 total: 1670948
100: buffer:B@45030a50 readBytes: 16384 total: 1687332
-1 Received
任何帮助或建议,不胜感激
最佳答案
read()在流的末尾而不是之前返回-1。如果您比预期的早到-1,则数据比预期的短,或者服务器的结束早于预期。