我正在从服务器传输文件,然后将其流回到套接字(基本上是流代理)。这用于缓冲歌曲。因此,一旦缓冲区已满,就不会再从套接字读取数据,直到缓冲区清空。但是,一旦读取了更多数据,InputStream将读取X个更多字节,然后突然返回-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
感谢任何帮助或建议
答案 0 :(得分:0)
read()在流的末尾返回-1而不是之前。如果你比预期更早得到-1,那么数据比预期的要短,或者服务器比预期更早地结束了他的结束。