我正在从服务器流式传输文件,然后将其流式传输回套接字(基本上是流代理)。这用于缓冲歌曲。因此,一旦缓冲区已满,就不会再从套接字读取任何数据,直到缓冲区清空为止。但是,一旦读取了更多数据,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,则数据比预期的短,或者服务器的结束早于预期。

10-07 15:46