Como faço para ler strings em J2ME?

votos
3

Eu estou usando o MIDP 2.0 (JSR 118) e eu só notei que não há leitor para cordas em J2ME.

Alguém sabe como você é suposto para ler Cordas de um InputStreamou InputStreamReaderde uma forma independente de plataforma (ou seja, entre dois telefones celulares Java ativado de modelos diferentes)?

Publicado 14/10/2008 em 08:20
fonte usuário
Em outras línguas...                            


4 respostas

votos
5

Qual perfil você está usando? O perfil MID em JSR 118 especifica InputStreamReader (não StringReader, mas que não iria ajudá-lo a ler de um InputStream de qualquer maneira).

EDIT: Para refletir a mudança para a questão :)

Você usa InputStreamReader.read (char [], int, int) e quando você já leu tudo que você quer, criar uma nova cadeia a partir de uma matriz de char. Se você quiser ler uma linha de cada vez como se fosse a partir BufferedReader, basicamente você precisa para implementar a funcionalidade de BufferedReader si mesmo (mantendo um buffer de "ler, mas não consumida" caracteres) e manter a leitura até que você bata uma quebra de linha.

Respondeu 14/10/2008 em 08:24
fonte usuário

votos
3

Bem ... Eu sei que isso foi um longo tempo atrás.

Você precisa fazer exatamente o que John disse, e é muito simples. Ele quase me levou 5 horas para descobrir isso pela primeira vez ...

Eu ainda me pergunto por que J2ME não incluir algo tão essencial como o BufferedReadermétodo para soquetes, não é como os telefones celulares do freakin irá travar com ele ... e sim, eu não dou a mínima se o meu aplicativo é executado 1ms mais lento do que devemos.

(Eu só vou colocar o código relevante, eu suponho que você sabe como formar aulas e importar as bibliotecas necessárias)

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

Como você pode ver, o is.read()método irá bloquear o fio até nova entrada é recebida do usuário um byte de cada vez. Isto significa que se você usar telnet para testar, cada tecla fará a iteração de loop uma vez, portanto, nós simplesmente concatenar caractere por caractere em uma StringBufferaté caractere 13 é recebido.

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

Espero que isso ajude as pessoas tentando fazer um servidor de soquete com o J2ME. Eu já trabalhada uma versão multithreaded totalmente funcional desta para a amora, no caso de alguém precisa dele.

Respondeu 19/10/2011 em 14:38
fonte usuário

votos
3

Alternativamente ter um olhar DataInputStream.readUTF().

Se necessário que a corda que está sendo lido fora do InputStream ser codificado de forma adequada (como em por um correspondente DataOutputStream.writeUTF(String)), por isso pode não ser o que você está procurando - mas trabalha através diferentes telefones / modelos etc.

Respondeu 14/10/2008 em 11:22
fonte usuário

votos
1

Você seria capaz de fornecer um exemplo disso?

Você usa InputStreamReader.read(char[], int, int)e quando você já leu tudo que você quer, criar uma nova cadeia a partir de uma matriz de char. Se você quiser ler uma linha de cada vez como se fosse a partir BufferedReader, basicamente você precisa para implementar a funcionalidade de BufferedReader si mesmo (mantendo um buffer de caracteres "ler, mas não consumidos") e manter a leitura até que você bata uma quebra de linha.

Respondeu 04/11/2008 em 07:00
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more