如何为Java InputStream元素发送EOF?

时间:2010-02-03 19:45:03

标签: java blackberry eof

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

             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);

我正在编写一个黑莓应用程序。

AC

4 个答案:

答案 0 :(得分: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() );

答案 1 :(得分:2)

这段代码的一个大问题是你似乎一次读取一个字节并假设每个字节是一个字符。这不一定是真的,但可能适用于像ASCII这样的简单编码。一次读一个字节也可能非常慢。

我不知道有这样的东西作为EOF字符 - 通常“EOF”是从read()等方法返回的值-1,但这不是一个字符。

这是另一种方法吗?它究竟是什么性格 - 你能找到吗?然后加上那个?目前尚不清楚你真正想做什么。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

XML解析器中的错误消息“Expecting end of file”可能与EOF字符无关。它可能表明存在一些XML语法问题(可能是XML解析器在格式良好的XML文档结束后遇到更多字符)