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

の最後の呼び出しで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

このコードの大きな問題の1つは、一度に1バイトを読み取り、各バイトが1文字であると想定しているように見えることです。これは必ずしも正しいとは限りませんが、ASCIIのような単純なエンコーディングでは機能します。一度に1バイトを読み取ることも非常に遅い場合があります。

EOF文字のようなものがあるかどうかはわかりません。通常、「EOF」はread()などのメソッドから返される値-1ですが、これは文字ではありません。

この他の方法は何ですか?それは正確にどのキャラクターを期待していますか?あなたは知ることができますか?それからそれを追加しますか?あなたが実際にそこで何をしようとしているのかは明らかではありません。

于 2010-02-03T19:56:36.177 に答える
2

ストリームをバイト配列に読み込みたいだけの場合は、IOUtilities.streamToBytes()を使用してみてください

于 2010-02-03T20:50:29.153 に答える
1

おそらく、XMLパーサーの「ファイルの終わりを期待しています」というエラーメッセージは、EOF文字とは関係ありません。XML構文の問題を示している可能性があります(整形式のXMLドキュメントの終了後にXMLパーサーがより多くの文字を検出した可能性があります)

于 2010-02-03T20:07:01.063 に答える