3

MIDP 2.0 (JSR 118) を使用していますが、J2ME に文字列のリーダーがないことに気付きました。

InputStreamプラットフォームに依存しない方法で (つまりInputStreamReader、異なるモデルの 2 つの Java 対応携帯電話間で)文字列を読み取る方法を知っている人はいますか?

4

4 に答える 4

5

どのプロファイルを使用していますか? JSR 118 の MID プロファイルは、InputStreamReaderを指定します(StringReader ではありませんが、とにかく InputStream からの読み取りには役立ちません)。

編集:質問への変更を反映するには:)

InputStreamReader.read(char[], int, int) を使用し、必要なものをすべて読み取ったら、char 配列から新しい文字列を作成します。BufferedReader のように一度に 1 行ずつ読みたい場合は、基本的に BufferedReader の機能を自分で実装し (「読み取ったが消費されていない」文字のバッファを保持する)、改行に達するまで読み続ける必要があります。

于 2008-10-14T07:24:03.810 に答える
3

ええと...私はこれがずっと前だったことを知っています。

あなたはジョンが言ったことを正確に行う必要があります、そしてそれは非常に簡単です。これを初めて理解するのにほぼ5時間かかりました...

j2MEBufferedReaderにソケットの方法ほど重要なものが含まれていなかったのはなぜだろうか、それはフリーキンの携帯電話がクラッシュするようなものではない...そして、はい、私のアプリがそれより1ms遅い場合、私はネズミのお尻を与えませんしたほうがいい。

(関連するコードを配置するだけです。クラスを形成し、必要なライブラリをインポートする方法を知っていると思います)

ServerSocketConnection listener
    = (ServerSocketConnection)Connector.open("socket://:1235");
System.out.println("Waiting for connection...");
StreamConnection server = listener.acceptAndOpen();
InputStream is = server.openInputStream();

//Now comes the fake BufferedReader equivalent part

int ch = 0;
StringBuffer sb = new StringBuffer();

while ((ch = is.read()) != -1){
    sb.append((char)ch);
    if(sb.charAt(sb.length()-1) == 13 ) {
       //Carriage return was received or ENTER was pressed
       break; //Exit loop and print input
    }
}

ご覧のとおり、このis.read()メソッドは、ユーザーから一度に1バイトずつ新しい入力が受信されるまでスレッドをロックします。つまり、telnetを使用してテストする場合、キーストロークごとにループが1回繰り返されるため、StringBufferchar 13が受信されるまで、charごとにcharを連結するだけです。

System.out.println(sb.toString());

これがj2MEでソケットサーバーを実行しようとしている人々に役立つことを願っています。誰かがそれを必要とする場合に備えて、私はすでにこれの完全に機能するマルチスレッドバージョンをブラックベリー用に作成しました。

于 2011-10-19T13:38:04.860 に答える
3

または、 をご覧くださいDataInputStream.readUTF()

InputStream から読み取られる文字列を適切にエンコードする必要があるため (対応する のDataOutputStream.writeUTF(String)ように)、探しているものではない可能性がありますが、さまざまな電話/モデルなどで動作します.

于 2008-10-14T10:22:20.160 に答える
1

この例を教えていただけますか?

使用InputStreamReader.read(char[], int, int)し、必要なものをすべて読んだら、char配列から新しい文字列を作成します。からのように一度に1行ずつ読み取りたい場合はBufferedReader、基本的にBufferedReaderの機能を自分で実装し(「読み取り済みだが消費されていない」文字のバッファーを保持)、改行に達するまで読み取りを続ける必要があります。

于 2008-11-04T06:00:00.997 に答える