Как отправить EOF для элемента Java InputStream? - PullRequest
3 голосов
/ 03 февраля 2010

, поэтому у меня есть следующий код, открывающий поток ввода и успешно собирающий информацию:

             httpInput = httpConnection.openInputStream();               

             sb= new StringBuffer();             

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

однако, когда я пытаюсь использовать эту же строку (sb.toString ()) в другом методе, я получаю сообщение об ошибке «Ожидается конец файла». так как мне прикрепить символ EOF к моей строке? ПРИМЕЧАНИЕ. Ответ в основном представляет собой XML-документ, поступающий с удаленного сервера.

поэтому, когда код достигает строки "parse", выдает ошибку выше:

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

Я кодирую это для приложения BlackBerry.

ас

Ответы [ 4 ]

2 голосов
/ 03 февраля 2010

Если вы просто хотите прочитать поток в байтовый массив, попробуйте использовать IOUtilities.streamToBytes ()

2 голосов
/ 03 февраля 2010

Одна большая проблема с этим кодом заключается в том, что вы, кажется, читаете по одному байту за раз и предполагаете, что каждый байт - это один символ. Это совсем не обязательно так, но это может сработать для некоторого простого кодирования, такого как ASCII. Чтение одного байта за раз также может быть очень медленным.

Я не знаю, что существует такая вещь, как символ EOF - обычно «EOF» - это значение -1, возвращаемое методами вроде read (), но это не символ.

Что это за другой метод? какого именно персонажа он ожидает - вы можете узнать? тогда просто добавь это? Непонятно, что ты на самом деле пытаешься там делать.

2 голосов
/ 03 февраля 2010

Последний вызов 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 голос
/ 03 февраля 2010

Возможно, сообщение об ошибке «Ожидается конец файла» в анализаторе XML не имеет ничего общего с символом EOF. Это может указывать на некоторую проблему синтаксиса XML (может быть, синтаксический анализатор XML обнаружил больше символов после окончания правильно сформированного документа XML)

...