代码之家  ›  专栏  ›  技术社区  ›  Spoike Otávio Décio

如何在J2ME中读取字符串?

  •  3
  • Spoike Otávio Décio  · 技术社区  · 17 年前

    我使用的是MIDP2.0(JSR118),我注意到J2ME中没有字符串阅读器。

    有人知道你应该如何从 InputStream InputStreamReader 在平台无关的方式(即在两个不同型号的Java使能手机)之间?

    4 回复  |  直到 11 年前
        1
  •  3
  •   Spoike Otávio Décio    14 年前

    或者看看 DataInputStream.readUTF() .

    它确实要求对从输入流中读取的字符串进行适当的编码(如 DataOutputStream.writeUTF(String) )所以它可能不是你想要的——但它确实适用于不同的手机/型号等。

        2
  •  5
  •   Jon Skeet    17 年前

    您使用的配置文件是什么?jsr 118中的mid profile指定 InputStreamReader (不是StringReader,但这也不能帮助您从输入流中进行读取)。

    编辑:以反映对问题的更改:)

    您使用inputstreamreader.read(char[],int,int),当您读取了所有想要的内容后,从char数组创建一个新字符串。如果您希望像从BufferedReader读取行那样一次读取一行,那么您基本上需要自己实现BufferedReader的功能(保留“已读但未消耗”字符的缓冲区),并一直读取,直到遇到换行符为止。

        3
  •  3
  •   gnat Nat Poor    14 年前

    好。。。我知道这是很久以前的事了。

    你必须严格按照约翰说的做,这很简单。我几乎花了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() 方法将锁定线程,直到每次从用户收到一个字节的新输入。这意味着,如果使用telnet进行测试,每个击键都会使循环迭代一次,因此,我们只需在 StringBuffer 直到收到char 13。

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

    我希望这能帮助人们在J2ME上做一个套接字服务器。我已经为黑莓设计了一个功能齐全的多线程版本,以防有人需要它。

        4
  •  1
  •   Lucifer phtrivier    11 年前

    你能举个例子吗?

    你用 InputStreamReader.read(char[], int, int) 当你读完所有你想读的内容后,从一个char数组中创建一个新的字符串。如果你想一次读一行 BufferedReader ,您基本上需要自己实现bufferedreader的功能(保留一个“read but not consumed”字符的缓冲区),并一直阅读直到遇到换行符。