Frage

Ich bin mit dem MIDP 2.0 (JSR 118) und ich habe gerade bemerkt, dass es für Streicher in J2ME keinen Leser ist.

Wer weiß, wie Sie sollen Strings von einem InputStream oder InputStreamReader in einer plattformunabhängigen Art und Weise lesen (das heißt zwischen zwei Java-fähigen Handys von verschiedenen Modellen)?

War es hilfreich?

Lösung

haben Alternativ einen Blick auf DataInputStream.readUTF() .

Es ist erforderlich, dass die Zeichenfolge, die die Input in geeigneter Weise durch eine entsprechende

Andere Tipps

Welches Profil verwenden Sie? Das MID-Profil in JSR 118 spezifiziert Input ( nicht String, sondern, dass Sie von einem Inputstream ohnehin nicht gelesen helfen würde).

EDIT: Um die Änderung auf die Frage nachzudenken:)

Sie verwenden InputStreamReader.read (char [], int, int) und wenn Sie alle gelesen haben Sie wollen, eine neue Zeichenfolge aus einem char-Array erstellen. Wenn Sie eine Zeile zu einem Zeitpunkt lesen möchten, wie Sie von BufferedReader würden Sie grundsätzlich die Funktionalität von BufferedReader implementieren müssen sich (halten einen Puffer von „lesen, aber nicht verbraucht“ Zeichen) und lesen Sie weiter, bis Sie einen Zeilenumbruch getroffen.

Nun ... Ich weiß, das vor langer Zeit ist.

Sie müssen genau das tun, was John sagte, und es ist sehr einfach. Es dauerte fast 5 Stunden, diese Figur zum ersten Mal aus ...

Ich frage mich immer noch, warum J2ME nicht etwas so wichtig wie die BufferedReader Verfahren für Steckdosen sind, ist es nicht die freakin Handys mögen damit abstürzen ... und ja, ich habe nicht einen Dreck, wenn meine app läuft geben 1ms langsamer als es sein sollte.

(Ich werde nur den entsprechenden Code setzen, ich nehme an, Sie wissen, wie Klassen zu bilden und die erforderlichen Bibliotheken importieren)

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
    }
}

Wie Sie sehen können, dann sperrt die is.read() Methode der Faden bis neue Eingabe vom Benutzer ein Byte zu einem Zeitpunkt empfangen wird. Das bedeutet, wenn Sie Telnet verwenden, um zu testen, jeder Tastendruck einmal die Schleife Iterierte machen, damit wir einfach verketten char von char in einem StringBuffer bis char 13 empfangen wird.

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

Ich hoffe, das hilft Menschen, die versuchen einen Socket-Server auf dem J2ME zu tun. Ich gestaltete bereits eine voll funktionsfähige Multi-Thread-Version dieses für Brombeere, falls jemand es braucht.

Möchten Sie in der Lage sein, ein Beispiel dafür zu schaffen?

Sie verwenden InputStreamReader.read(char[], int, int) und wenn Sie alle gelesen haben Sie wollen, eine neue Zeichenfolge aus einem char-Array erstellen. Wenn Sie eine Zeile zu einem Zeitpunkt lesen möchten, wie Sie von BufferedReader würden Sie grundsätzlich die Funktionalität von BufferedReader implementieren müssen sich (halten einen Puffer von „lesen, aber nicht verbraucht“ Zeichen) und lesen Sie weiter, bis Sie einen Zeilenumbruch getroffen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top