读取 NANOHTTPD 的 InputStream 会产生 Socket TimeOut 异常
Posted
技术标签:
【中文标题】读取 NANOHTTPD 的 InputStream 会产生 Socket TimeOut 异常【英文标题】:Reading InputStream of NANOHTTPD gives Socket TimeOut Exception 【发布时间】:2014-09-15 21:01:45 【问题描述】:我正在尝试使用以下代码从 IHTTPSession.getInputStream() 读取 InputStream,但它每次都会给出 Socket TimeOut 异常。
private String readInStream(InputStream in)
StringBuffer outBuffer=new StringBuffer();
BufferedInputStream bis=new BufferedInputStream(in);
try
while(bis.available()>0)
int ch= bis.read();
outBuffer.append((char)ch);
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
Log.e("DATA_Length", "outputBuffer :"+outBuffer.toString().length());
return outBuffer.toString();
我也尝试了以下方法,但出现了同样的异常
private String readInStream(InputStream in)
String line="";
StringBuffer outBuffer=new StringBuffer();
BufferedReader rd=new BufferedReader(new InputStreamReader(in));
try
while((line=rd.readLine()) != null)
outBuffer.append(line);
catch (IOException e)
Log.e("IOException", "IOException in readInStream:");
e.printStackTrace();
Log.e("DATA_Length", "outputBuffer :"+outBuffer.toString().length());
return outBuffer.toString();
【问题讨论】:
【参考方案1】:从标题中获取内容长度并读取它解决了这个问题。
【讨论】:
【参考方案2】:可以确认接受的答案有效(从标题中获取内容长度并阅读它)。下面是一些将InputStream
转换为String
的示例代码:
try
int contentLength = Integer.valueOf(session.getHeaders().get("content-length"));
String msg = new String(in.readNBytes(contentLength)); // the request body
catch (IOException e)
e.printStackTrace();
如果你想在此处阻止NullPointerException
,请在将其解析为整数之前检查 content-length 标头是否确实存在。
【讨论】:
以上是关于读取 NANOHTTPD 的 InputStream 会产生 Socket TimeOut 异常的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 NanoHTTPD 将图像发送到 Chromecast