J2ME で文字列を読み取るにはどうすればよいですか?
-
03-07-2019 - |
質問
MIDP 2.0 (JSR 118) を使用していますが、J2ME には文字列のリーダーがないことに気づきました。
から文字列を読み取る方法を知っている人はいますか? InputStream
または InputStreamReader
プラットフォームに依存しない方法で(すなわち、異なるモデルの 2 台の Java 対応携帯電話間での通信は可能ですか)?
解決
をご覧ください DataInputStream.readUTF()
。
InputStreamから読み取られる文字列を適切にエンコードする必要があります(対応する DataOutputStream.writeUTF(String)
)ので、探しているものではないかもしれません-ただし、さまざまな電話/モデルなどで機能します。
他のヒント
どのプロファイルを使用していますか?JSR 118 の MID プロファイルは次のように指定します。 入力ストリームリーダー (StringReader ではありませんが、いずれにしても、InputStream からの読み取りには役に立ちません)。
編集:質問への変更を反映するには:)
InputStreamReader.read(char[], int, int) を使用し、必要な情報をすべて読み取ったら、char 配列から新しい文字列を作成します。BufferedReader から行うように一度に 1 行ずつ読み取りたい場合は、基本的に BufferedReader の機能を自分で実装し (「読み取りはされるが消費されない」文字のバッファーを保持し)、改行に達するまで読み取りを続ける必要があります。
まあ...これはかなり前のことだと思います。
ジョンが言ったことを正確に行う必要があり、それは非常に簡単です。これを初めて理解するのに5時間近くかかった...
j2MEにソケットの BufferedReader
メソッドほど重要なものが含まれていなかった理由はまだ疑問です。フリーケンの携帯電話がクラッシュするわけではありません...そして、私は与えません私のアプリが本来よりも1ミリ秒遅い場合のネズミのお尻。
(関連するコードを配置するだけです。クラスを形成し、必要なライブラリをインポートする方法を知っていると思います)
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回反復されるため、char 13が受信されるまで、 StringBuffer
内のcharごとにcharを単純に連結します。
System.out.println(sb.toString());
これが、j2MEでソケットサーバーを実行しようとしている人々に役立つことを願っています。誰かがそれを必要とする場合のために、私はすでにブラックベリーのためにこれの完全に機能するマルチスレッド版を作りました。
この例を挙げていただけますか?
あなたが使う InputStreamReader.read(char[], int, int)
必要な情報をすべて読み終えたら、char 配列から新しい文字列を作成します。次のように一度に 1 行ずつ読みたい場合は、 BufferedReader
, 、基本的には、BufferedReader の機能を自分で実装し (「読み取られるが消費されない」文字のバッファーを保持する)、改行に達するまで読み続ける必要があります。