3

所以我有以下代码打开输入流并成功收集信息:

             httpInput = httpConnection.openInputStream();               

             sb= new StringBuffer();             

             while (ch != -1) 
             {
                 ch = httpInput.read();
                 sb.append((char)ch);
             }

但是,当我尝试在另一种方法中使用相同的字符串 (sb.toString()) 时,我收到一条错误消息,指出“预期文件结束。”。那么如何将 EOF 字符附加到我的字符串?注意:响应基本上是来自远程服务器的 xml 文档。

所以当代码到达“解析”行时,它给了我上面的错误:

bis = new ByteArrayInputStream(sb.toString().getBytes()); doc = docBuilder.parse(bis);

我正在为黑莓应用程序编写此代码。

交流

4

4 回答 4

2

如果您只想将流读入字节数组,请尝试使用IOUtilities.streamToBytes()

于 2010-02-03T20:50:29.153 回答
2

最后一次调用ch = httpInput.read();为您提供值 -1,然后将其附加到您的 StringBuffer sb。但是这段代码read()告诉你它已经到达流的末尾,它不是你应该附加的字符。

你可以这样做:

ByteArrayOutputStream out = new ByteArrayOutputStream();
while (true) 
{
    ch = httpInput.read();
    if( ch == -1 ) {
        break;
    }
    out.write( ch );
}
String result = out.toString( "utf-8" ); // or whatever charset is used

// or if you only need another InputStream:
ByteArrayInputStream in = new ByteArrayInputStream( out.getBytes() );
于 2010-02-03T19:55:38.223 回答
2

这段代码的一个大问题是您似乎一次读取一个字节并假设每个字节是一个字符。这不一定完全正确,但恰好适用于一些简单的编码,如 ASCII。一次读取一个字节也可能非常慢。

我不知道有没有像 EOF 字符这样的东西——通常“EOF”是从 read() 之类的方法返回的值 -1,但这不是字符。

这是什么其他方法?它到底期待什么角色——你能找出来吗?然后添加?目前尚不清楚你真正想在那里做什么。

于 2010-02-03T19:56:36.177 回答
1

也许 XML 解析器中的错误消息“期望文件结束”与 EOF 字符无关。它可能表示一些 XML 语法问题(可能是,XML 解析器在格式良好的 XML 文档结束后遇到更多字符)

于 2010-02-03T20:07:01.063 回答