我有一个Android应用程序,它连接到PC上的.NET HTTP服务,并允许浏览该PC上的媒体目录。该接口类似于带有当前目录/媒体文件列表的文件浏览器。
当用户从列表中选择目录名称时,该目录的内容将在JSON响应中返回。
我的问题是有时Android的结尾认为JSON不完整但我不知道为什么我在服务器端记录了JSON字符串并且它被正确终止。处理响应的Android代码如下......
int contentLength = -1;
int totalRead = 0;
int numRead = -1;
InputStream inStream = connHelper.getInputStream();
contentLength = connHelper.getContentLength();
byte[] buffer = new byte[contentLength != -1 ? contentLength : 8192];
while ((numRead = inStream.read(buffer)) != -1)
if (numRead != 0)
totalRead += numRead;
Log.d(TAG, "getMediaList() - totalRead: " + totalRead);
String jsonString = new String(buffer, "UTF-8");
Log.d(TAG, "jsonString.length() - " + jsonString.length());
Log.d(TAG, "jsonString - " + jsonString);
这是来自Android logcat的一系列事件的日志......
requestValue: D:\Jukebox\Classical\Classic FM - Smooth Classics (Do Not Disturb) (Disc 2)\
getMediaList() - totalRead: 501
jsonString.length() - 501
jsonString - {"folders":[],"media":[<cut for brevity>]}
...但是这里有一个糟糕的日志,这对于这个媒体列表是一致的......
requestValue: D:\Jukebox\Classical\De Lucia, Paco\Collection\
getMediaList() - totalRead: 353
jsonString.length() - 351
jsonString - {"folders":[],"media":[<cut for brevity>,"14 Concierto de Aranjuez (Adagio).mp3"
请注意,问题媒体列表的总字节数为353,但jsonString
仅为351字节。另请注意,jsonString
的日志显示缺少关闭的数组/对象字符]}
。
我对此完全感到困惑。 .NET服务器日志显示完整的JSON字符串,Android日志显示353字节被读取但jsonString
长度仅显示351字节。任何人都可以解释可能导致这种情况的原因吗?
答案 0 :(得分:2)
我怀疑您的问题是来自您的信息流的多字节字符。特别是因为你的样本中有一些非英文文件名,很可能它会被一些有趣的角色所困扰。而不是从InputStream
转换为字节到String
,看看您是否可以使用InputStreamReader
来处理所有棘手的事情。
答案 1 :(得分:1)